2016-11-09 22 views
8

Mam ramki danych pandy my_df i my_df.dtypes daje nam:pyspark: ValueError: Niektóre z typów nie można ustalić po wnioskowaniu

ts    int64 
fieldA   object 
fieldB   object 
fieldC   object 
fieldD   object 
fieldE   object 
dtype: object 

Potem próbuję przekonwertować ramkę danych pandy my_df do danych zapłonowej rama wykonując poniżej:

spark_my_df = sc.createDataFrame(my_df) 

jednak mam następujące błędy:

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 

Czy ktoś wie, co oznacza powyższy błąd? Dzięki!

Odpowiedz

7

Aby wywnioskować typ pola, PySpark sprawdza nie-żadne rekordy w każdym polu. Jeśli pole ma tylko rekordy Brak, PySpark nie może wnioskować o typie i zgłosi ten błąd.

0

Aby rozwiązać ten problem, można podać własny zdefiniowany schemat.

Na przykład:

Aby odtworzyć błąd:

>>> df = spark.createDataFrame([[None, None]], ["name", "score"]) 

naprawić błąd:

>>> from pyspark.sql.types import StructType, StructField, StringType, DoubleType 
>>> schema = StructType([StructField("name", StringType(), True), StructField("score", DoubleType(), True)]) 
>>> df = spark.createDataFrame([[None, None]], schema=schema) 
>>> df.show() 
+----+-----+ 
|name|score| 
+----+-----+ 
|null| null| 
+----+-----+