code: def _inferSchema(self, rdd, samplingRatio=None, names=None):
          
          first = rdd.first()
          if not first:
              raise ValueError("The first row in RDD is empty, "
                               "can not infer schema")
          if type(first) is dict:
              warnings.warn("Using RDD of dict to inferSchema is deprecated. "
                            "Use pyspark.sql.Row instead")
  
          if samplingRatio is None:
              schema = _infer_schema(first, names=names)
              if _has_nulltype(schema):
                  for row in rdd.take(100)[1:]:
                      schema = _merge_type(schema, _infer_schema(row, names=names))
                      if not _has_nulltype(schema):
                          break
                  else:
                      raise ValueError("Some of types cannot be determined by the "
                                       "first 100 rows, please try again with sampling")
          else:
              if samplingRatio < 0.99:
                  rdd = rdd.sample(False, float(samplingRatio))
              schema = rdd.map(lambda row: _infer_schema(row, names)).reduce(_merge_type)
          return schema
docs: Infer schema from an RDD of Row or tuple.
  
          :param rdd: an RDD of Row or tuple
          :param samplingRatio: sampling ratio, or no sampling (default)
          :return: :class:`pyspark.sql.types.StructType`