2016-11-09 18 views
8

Tôi có một khung dữ liệu gấu trúc my_df, và my_df.dtypes cho chúng ta:pyspark: ValueError: Một số loại không thể được xác định sau khi suy luận

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

Sau đó, tôi đang cố gắng để chuyển đổi các khung dữ liệu gấu trúc my_df đến một dữ liệu tia lửa khung bằng cách làm dưới đây:

spark_my_df = sc.createDataFrame(my_df) 

Tuy nhiên, tôi nhận được các lỗi sau đây:

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 

Có ai biết ý nghĩa của lỗi trên không? Cảm ơn!

Trả lời

7

Để suy ra loại trường, PySpark xem xét các bản ghi không có trong mỗi trường. Nếu một trường chỉ có Không có bản ghi, PySpark không thể suy ra loại và sẽ làm tăng lỗi đó.

0

Và để khắc phục sự cố này, bạn có thể cung cấp giản đồ được xác định của riêng bạn.

Ví dụ:

Để sao chép các lỗi:

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

Để khắc phục lỗi:

>>> 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| 
+----+-----+ 
Các vấn đề liên quan