【发布时间】: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)