json - 如何使用pyspark中的多行选项将数据框保存到json文件中

标签 json pyspark pyspark-dataframes

在 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"}]

我试过option("multiLine", "true") 和lineSep="," 似乎都没有用,这些选项只对读有效,对写无效。请提出解决此问题的方法

最佳答案

to_jsoncollect_list 函数一起使用并编写为 .text()

示例:

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"}]

关于json - 如何使用pyspark中的多行选项将数据框保存到json文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63200078/

相关文章:

php - 通过 JSON 数组/对象返回 MYSQL 查询结果?

pyspark - 获取 pyspark 中上一个分区的最后一个值

apache-spark - 如果在 S3 的 Parquet 文件中发现同一列的不同数据类型,AWS Glue 作业会在 Redshift 中创建新列

python - 在 PySpark 中提取多个正则表达式匹配项

java - 将 JSON 类反序列化为不同名称的 Java 类

android - 使用android Volley将数据以json格式发送到服务器

python - SparkSQL : HQL script in file to be loaded on Python code

scala - 我该如何解决 "need struct type but got struct"

javascript - jQuery同时发布多个帖子

apache-spark - PySpark 结构化流,窗口根据时间戳值获取最早和最新记录