【发布时间】:2023-04-11 01:24:02
【问题描述】:
我想将我的 spark 数据框写为一组 JSON 文件,尤其是每个文件都写为 JSON 数组。 让我用一个简单的(可重现的)代码来解释。
我们有:
import numpy as np
import pandas as pd
df = spark.createDataFrame(pd.DataFrame({'x': np.random.rand(100), 'y': np.random.rand(100)}))
将数据框保存为:
df.write.json('s3://path/to/json')
刚刚创建的每个文件每行都有一个 JSON 对象,例如:
{"x":0.9953802385540144,"y":0.476027611419198}
{"x":0.929599290575914,"y":0.72878523939521}
{"x":0.951701684432855,"y":0.8008064729546504}
但我希望每个文件拥有一个 JSON 数组:
[
{"x":0.9953802385540144,"y":0.476027611419198},
{"x":0.929599290575914,"y":0.72878523939521},
{"x":0.951701684432855,"y":0.8008064729546504}
]
【问题讨论】:
-
每个执行器并行写入其数据。您可以连接所有零件文件并自己添加括号。
-
这只是一种解决方法,即使它对我来说不可行,因为一旦在 s3 上写入文件,就会触发 lambda...
-
您是否可以让每个文件成为
json的数组,或者您是否希望将全部内容放在一个文件中。如果你使用 spark 2.4df.coalesce(1).write.json("path", lineSep="\n,")几乎可以让你到达那里...... -
@pault,可以让每个文件都是一个 json 数组,而不仅仅是一个文件
标签: python json apache-spark pyspark