Python 使用pyspark从数据帧创建json结构

Python 使用pyspark从数据帧创建json结构,python,json,pyspark,pyspark-sql,Python,Json,Pyspark,Pyspark Sql,我有一个数据帧,它是左连接的产物。现在我想创建json结构 我尝试使用不同的选项,但无法创建它。这是我的数据框: Col1 col2 col3 col4 1111 name null null 1112 name1 abcd def 1112 name1 DEFG ABXC 所需的json结构是: {col1 : 1111, col2 : name , detial: {col3:,col4:}} {col1 : 1112,

我有一个数据帧,它是左连接的产物。现在我想创建json结构

我尝试使用不同的选项,但无法创建它。这是我的数据框:

Col1    col2    col3    col4
1111    name    null    null
1112    name1   abcd    def
1112    name1   DEFG    ABXC

所需的json结构是:

{col1 : 1111, col2 : name , detial: {col3:,col4:}}
{col1 : 1112, col2 : name1 , detial: {{col3:abcd,col4:def},{col3:DEFG,col4:ABXC}}}

我已经从示例数据集中创建了数据,并从中创建了数据帧。您可以使用以下代码:

from pyspark.sql import Row, DataFrame,SparkSession
from pyspark.sql.functions import *
import json
spark = SparkSession.builder.getOrCreate()

data = spark.createDataFrame([Row(col1=1111,col2="name",col3=None,col4=None),Row(col1=1112,col2="name1",col3="abcd",col4="def"),Row(col1=1112,col2="name1",col3="DEFG",col4="ABXC")])

ndata = data.select(struct("col1","col2",struct("col3","col4").alias("details")).alias("data"))

dataList = list(map(json.loads,ndata.toJSON().collect()))

上面的代码以python中的字典列表的形式返回结果。

您需要从pyspark.sql包导入
struct()
来自pyspark.sql导入结构
@Shane如果您的查询得到了回答,您能接受我的答案并关闭此线程吗我尝试了您的解决方案,但没有得到所需的输出,即{col1:1111,col2:name,detial:{col3:1112,col2:name1,detial:{{col3:abcd,col4:def},{col3:DEFG,col4:ABXC}}`你的代码给了我
[u'{“data”:{“col1”:1111,“col2”:“name”,“details”:{}}},{“data”:{“col1”:1112,“col2”:“name1”,“details”:{“col3”:“abcd”,“col4”:“def”}},{“data”:{“col1”:1112,“col2”:“name1”,“details”:{“col3”:“DEFG”,“col4”:“ABXC”}}}}]
我更新了我的代码。您现在将获得一个字典列表,其中每个字典都是您想要的结构。现在我根本没有得到任何输出。。。我想我需要根据col1和col2以及我需要了解如何组合的细节值进行分组。