如何从具有特定格式的数据框中保存 json?

Posted

技术标签:

【中文标题】如何从具有特定格式的数据框中保存 json?【英文标题】:How to save a json from dataframe with specific format? 【发布时间】:2019-03-25 18:21:25 【问题描述】:

我正在尝试将以下 pyspark 数据帧保存到 json:

ID VARIABLE_1
1      1
2      0
3      0
4      1
5      0

但我需要 json 是这样的:

 "1": "VARIABLE_1": 1 
 "2": "VARIABLE_1": 0 
 "3": "VARIABLE_1": 0 
 "4": "VARIABLE_1": 1 
 "5": "VARIABLE_1": 0 

保存到 json 时,我得到以下信息:

 "ID":"1", "VARIABLE_1": 1 
 "ID":"2", "VARIABLE_1": 0 
 "ID":"3", "VARIABLE_1": 0 
 "ID":"4", "VARIABLE_1": 1 
 "ID":"5", "VARIABLE_1": 0 

我正在尝试保存

df.write.mode("overwrite").format("json").save(json_path)

我尝试使用 create_map 并得到这样的数据框:

NEW_COLUMN_NAME
 "1": "VARIABLE_1": 1 
 "2": "VARIABLE_1": 0 
 "3": "VARIABLE_1": 0 
 "4": "VARIABLE_1": 1 
 "5": "VARIABLE_1": 0  

但是当我尝试将这个新数据框保存到 json 时,我得到:

"NEW_COLUMN_NAME":"1":"VARIABLE_1":1
"NEW_COLUMN_NAME":"2":"VARIABLE_1":0
"NEW_COLUMN_NAME":"3":"VARIABLE_1":0
"NEW_COLUMN_NAME":"4":"VARIABLE_1":1
"NEW_COLUMN_NAME":"5":"VARIABLE_1":0

我真的不知道该怎么办,有人知道吗?

谢谢!

【问题讨论】:

json 格式将包含名称和值,在保存为 json 格式时不能删除一个名称(ID)并保留另一个名称(VARIABLE_1) 一旦你得到你想要的格式的数据(使用create_map)尝试使用.write.text(json_path)将字符串写入文件。像这样的东西:df.select("NEW_COLUMN_NAME").write.text(json_path) 当我尝试 write.text 时,它显示“文本数据源不支持地图”,如果我尝试 Cast('string'),它会从 "1": "VARIABLE_1": 1 到 [1-> [VARIABLE_1-> 0]] 我的 spark 是 2.4 版 我无法在 2.4 上进行测试,但 to_json 可以在 MapType() 列上工作吗? df.select(to_json("NEW_COLUMN_NAME")).write.text(json_path)。如果没有,这有点麻烦,但您可以手动构建字符串:df.select(concat(lit('"'), "ID", lit('":"VARIABLE_1":"'), "VARIABLE_1", lit('"')).write.text(json_path) 【参考方案1】:

我是如何解决这个问题的:

-使用 collect() 收集 create_map 数据帧

-用于为数据帧的每一行制作一个字典

-使用 json.dumps 和字典

-使用 open(path, "w") 保存

【讨论】:

以上是关于如何从具有特定格式的数据框中保存 json?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jquery 将变量数据保存为特定文件位置的 .json 扩展文件格式

如何从 pyspark 数据框中更快地保存 csv 文件?

如何从 api 服务器下载/保存 json 数据并在每个特定时间自动更新?

在颤振中,我将如何从生成的文本框中保存文本框输入?

如何在不包括特定值的数据框中获取最小时间值

如何在数据库中将 JSON 保存为 CLOB 或 JSON 类型