pyspark: ValueError: Einige Arten nicht bestimmt werden kann nach der Herleitung
Habe ich ein Pandabären-Daten-frame my_df
, und my_df.dtypes
uns gibt:
ts int64
fieldA object
fieldB object
fieldC object
fieldD object
fieldE object
dtype: object
Dann bin ich versucht zu konvertieren, die pandas data frame my_df
zu Funken-Daten-frame-by-doing unter:
spark_my_df = sc.createDataFrame(my_df)
Allerdings bekam ich folgenden Fehler:
ValueErrorTraceback (most recent call last)
<ipython-input-29-d4c9bb41bb1e> in <module>()
----> 1 spark_my_df = sc.createDataFrame(my_df)
2 spark_my_df.take(20)
/usr/local/spark-latest/python/pyspark/sql/session.py in createDataFrame(self, data, schema, samplingRatio)
520 rdd, schema = self._createFromRDD(data.map(prepare), schema, samplingRatio)
521 else:
--> 522 rdd, schema = self._createFromLocal(map(prepare, data), schema)
523 jrdd = self._jvm.SerDeUtil.toJavaArray(rdd._to_java_object_rdd())
524 jdf = self._jsparkSession.applySchemaToPythonRDD(jrdd.rdd(), schema.json())
/usr/local/spark-latest/python/pyspark/sql/session.py in _createFromLocal(self, data, schema)
384
385 if schema is None or isinstance(schema, (list, tuple)):
--> 386 struct = self._inferSchemaFromList(data)
387 if isinstance(schema, (list, tuple)):
388 for i, name in enumerate(schema):
/usr/local/spark-latest/python/pyspark/sql/session.py in _inferSchemaFromList(self, data)
318 schema = reduce(_merge_type, map(_infer_schema, data))
319 if _has_nulltype(schema):
--> 320 raise ValueError("Some of types cannot be determined after inferring")
321 return schema
322
ValueError: Some of types cannot be determined after inferring
Weiß jemand, was die obige Fehlermeldung bedeutet? Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um zu folgern, die Art des Feldes, PySpark sieht in der nicht-keine Aufzeichnungen in den einzelnen Bereichen. Wenn ein Feld nur hat Keine Aufzeichnungen, PySpark können keine Rückschlüsse auf die Art und erheben, die Fehler.
Manuell definieren ein schema, um das Problem zu beheben
Und um dieses problem zu beheben, können Sie Ihre eigenen definierten schema.
Beispiel:
Den Fehler zu reproduzieren:
Den Fehler zu beheben:
Wenn Sie die
RDD[Row].toDF()
monkey-Patch-Methode können Sie eine Vergrößerung der Stichprobe-Verhältnis um zu überprüfen, mehr als 100 Datensätze bei der Herleitung von Typen:Vorausgesetzt, es gibt nicht-null-Zeilen in allen Bereichen in Ihrem RDD, wird es wahrscheinlicher sein, Sie zu finden, wenn Sie erhöhen die
sampleRatio
Richtung 1.0.Dies ist wahrscheinlich, weil die Spalten, die haben alle null-Werte. Löschen Sie die Spalten, die vor der Umwandlung in eine Funke-dataframe
Ich habe laufen in das gleiche Problem, wenn Sie brauchen nicht die Spalten, die null sind, können Sie einfach ziehen Sie Sie aus der pandas dataframe vor dem Import zu spark: