【发布时间】:2018-01-20 13:07:33
【问题描述】:
我正在尝试使用 createDataFrame 函数和定义的 schema 将 RDD 转换为数据帧,并将生成的数据帧存储为 json:
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 - 除 lat 和 lon 之外的所有字段都已填充空值。
我可以看到这意味着 RDD 行和我定义的模式之间的模式不匹配。但是,我无法弄清楚架构的问题,因为我已经满足/认为我已经满足了嵌套的 json 结构。
不胜感激任何有关此的帮助/指针。
谢谢!
【问题讨论】:
标签: json pyspark schema spark-dataframe