如何在pyspark中使用多行选项将数据帧保存到json文件中

2023-11-29

在 Pyspark 中,我想将数据帧保存为 json 文件,但格式如下

说这是我的数据框

>>> rdd1.show()
+----------+-----+
|        f1|   f2|
+----------+-----+
|AAAAAAAAAA|99999|
| BBBBBBBBB|99999|
| CCCCCCCCC|99999|
+----------+-----+

如果我将上面的数据框保存为 json 文件,它会给出如下所示的输出

>>>rdd1.coalesce(1).write.json("file:///test_directory/sample4")
{"f1":"AAAAAAAAAA","f2":"99999"}
{"f1":"BBBBBBBBB","f2":"99999"}
{"f1":"CCCCCCCCC","f2":"99999"}

但我想要像下面这样的

[{"f1":"AAAAAAAAAA","f2":"99999"},{"f1":"BBBBBBBBB","f2":"99999"},{"f1":"CCCCCCCCC","f2":"99999"}]

我努力了选项(“multiLine”,“true”)和lineSep =“,”似乎没有一个起作用,这些选项仅适用于读取而不是写入。请为这个问题提出一个解决方案


Use to_json with collect_list函数并写为.text().

Example:

df.show()
#+-----+-----+
#|   f1|   f2|
#+-----+-----+
#|AAAAA| 9999|
#|  BBB|99999|
#| CCCC| 9999|
#+-----+-----+

from pyspark.sql.functions import *

df.agg(to_json(collect_list(struct(col("f1"),col("f2")))).alias("d")).\
write.\
mode("overwrite").\
text("<path>")

#output
#[{"f1":"AAAAA","f2":"9999"},{"f1":"BBB","f2":"99999"},{"f1":"CCCC","f2":"9999"}]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在pyspark中使用多行选项将数据帧保存到json文件中 的相关文章

随机推荐