如何使用特定格式从数据帧保存json?

如何使用特定格式从数据帧保存json?,json,pyspark,Json,Pyspark,我正在尝试将以下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时,我得到以

我正在尝试将以下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}}}
我真的不知道该怎么办,有人知道吗

谢谢

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

-使用collect()收集创建映射数据帧

-用于为数据帧的每一行创建字典

-将json.dumps与字典一起使用


-使用open(path,“w”)保存的json格式将包含名称和值,保存为json格式时不可能删除一个名称(ID)并保留另一个名称(变量_1)。一旦您获得所需格式的数据(使用
创建_映射
),请尝试使用
。write.text(json_path)
将字符串写入文件。类似这样:
df.select(“NEW_COLUMN_NAME”).write.text(json_path)
当我尝试write.text时,它会显示“文本数据源不支持映射”,如果我尝试强制转换('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_路径)