如何将下面的代码转换为使用DataFrame,df2.write.format('json')
编写输出json
rdd.map
DataFrame
的嵌套json,那么您能说明如何实现吗?因为这可能会解决所有的问题。以下是我尝试过的:
import json
rdd = sc.parallelize([(1,2,3),(4,5,6),(7,8,9)])
df = rdd.toDF(["a","b","c"])
rddToJson = df.rdd.map(lambda x: json.dumps({"some_top_level_1": {"mycolumn1": x.a}})) // note that result json is complex and more nested than input
rddToJson.collect()
结果:包含撇号(不能替换,它可以出现在任何值),如何使用适当的方案和数据,然后df.json.write?
结果:
Out[20]:
['{"some_top_level_1": {"mycolumn1": 1}}',
'{"some_top_level_1": {"mycolumn1": 4}}',
'{"some_top_level_1": {"mycolumn1": 7}}']
我的目标(除非可以用另一种方式完成)是使用df.write.format(' json '),以便从上面的输入编写嵌套/复杂的json。
PS:我看到了一个有趣的帖子:https://medium.com/@mrpowers/adding-structtype-columns-to-spark-dataframes-b44125409803,但由于我是新手,我不知道如何将我拥有的输入转换成输出所需的嵌套方案。
发布于 2018-12-04 05:53:20
您可以使用struct函数从平面架构创建嵌套数据。
import json
rdd = sc.parallelize([(1,2,3),(4,5,6),(7,8,9)])
df = rdd.toDF(["a","b","c"])
df2 = df.withColumn("some_top_level_1", struct(col("a").alias("my_column1"))).select("some_top_level_1")
df2.coalesce(1).write.mode("overwrite").json("test.json")
https://stackoverflow.com/questions/53611795
复制相似问题