如何从具有特定格式的数据框中保存 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 扩展文件格式