0
私はcreateDataFrame
機能と定義されてschema
を使用してデータフレームにRDDを変換し、JSONとして結果のデータフレーム保存しようとしています使用してRDDからのデータフレームを作成する問題:Pyspark - 定義されたスキーマ
df_final = sqlContext.createDataFrame(my_rdd, schema)
df_final.write.json('/tmp/data')
RDDを
{"obj1": {"name": "ABC", "dateCreatedUtc": "2017-06-23 00:00:00", "pair1": {"lat": 60.82349395751953, "lon": -8.173828125}, "pair2": {"lat": 49.16015625, "lon": 1.867676019668579}}, "obj2": {"name": "DEF", "pair1": {"lat": "0.00", "lon": "0.00"}, "pair2": {"lat": "0.00", "lon": "0.00"}}}
{"obj1": {"name": "GHI", "dateCreatedUtc": "2017-06-23 00:00:00", "pair1": {"lat": 10.43567890021344, "lon": -17.34675465}, "pair2": {"lat": 80.36473824, "lon": 4.557957859758945}}, "obj2": {"name": "JKL", "pair1": {"lat": "0.00", "lon": "0.00"}, "pair2": {"lat": "0.00", "lon": "0.00"}}}
...
...
...
次のように私はschema
を定義しようとした:次の行が含まれてい
schema = StructType([
StructField('obj1', MapType(StringType(), MapType(StringType(), StringType(), True), True), True),
StructField('obj2', MapType(StringType(), MapType(StringType(), StringType(), True), True), True)
])
コードがうまく動作しますが、私は私の出力JSONファイルをチェックするとき、次のように、行は次のようになります。
{"obj1": {"name": null, "dateCreatedUtc": null, "pair1": {"lat": 60.82349395751953, "lon": -8.173828125}, "pair2": {"lat": 49.16015625, "lon": 1.867676019668579}}, "obj2": {"name": null, "pair1": {"lat": "0.00", "lon": "0.00"}, "pair2": {"lat": "0.00", "lon": "0.00"}}}
{"obj1": {"name": null, "dateCreatedUtc": null, "pair1": {"lat": 10.43567890021344, "lon": -17.34675465}, "pair2": {"lat": 80.36473824, "lon": 4.557957859758945}}, "obj2": {"name": null, "pair1": {"lat": "0.00", "lon": "0.00"}, "pair2": {"lat": "0.00", "lon": "0.00"}}}
TL; DRは - 緯度とロンを除くすべてのフィールドは、ヌル値が移入されています。
これは、RDDの行と定義したスキーマとの間のスキーマの不一致を意味することがわかります。しかし、私は入れ子になったjson構造のために料理をしていると思っていたので、私はスキーマの問題を理解することができません。
これに関するヘルプ/参考情報はありがたいです。
ありがとうございます!