現在、Spark 1.4.1
を使用しています。入れ子になっている辞書を含む辞書をSpark DataFrame
に変換することはできません。入れ子になったdict
をに変換しますが、スキーマは受け入れられないようです。ここでPySparkはdictsのRDDをDataFrameに変換できません。エラー:タイプ<class 'pyspark.sql.types.Row'>のオブジェクトを受け入れることができません。
は私のエラーを再現するためのコードです:私はこのエラーが発生した理由を
from pyspark.sql import Row, SQLContext, types as pst
sqlContext = SQLContext(sc)
example_dict = Row(**{"name": "Mike", "data": Row(**{"age": 10, "like": True})})
example_rdd = sc.parallelize([example_dict])
nested_fields = [pst.StructField("age", pst.IntegerType(), True),
pst.StructField("like", pst.BooleanType(), True)]
schema = pst.StructType([
pst.StructField("data", pst.StructType(nested_fields), True),
pst.StructField("name", pst.StringType(), True)
])
df = sqlContext.createDataFrame(example_rdd, schema)
TypeError: StructType(List(StructField(age,IntegerType,true),StructField(like,BooleanType,true))) can not accept object in type <class 'pyspark.sql.types.Row'>
は私はわかりません。私は何かが欠けていた場合
>>> example_rdd.first()
Row(data=Row(age=10, like=True), name='Mike')
>>> schema
StructType(List(StructField(data,StructType(List(StructField(age,IntegerType,true),StructField(like,BooleanType,true))),true),StructField(name,StringType,true)))
私はわからないが、スキーマオブジェクトと一致していることを表示されます。ここではobjects rdd
とschema
です。 Spark 1.4.1
が行内で行を受け入れない理由はありますか?
注:これはSpark 2.0.2
の問題ではありませんが、残念ながら私はSpark 1.4.1
を使用して共有リソースを使用していますので、しばらくの間回避策を見つける必要があります。 !。
pst._acceptable_types[pst.StructType]
(tuple, list)
とスパークは、素朴なチェックを行います:進める