使用 pyspark 从数据框创建 json 结构
Posted
技术标签:
【中文标题】使用 pyspark 从数据框创建 json 结构【英文标题】:creating json structure from dataframe using pyspark 【发布时间】:2019-05-22 07:45:09 【问题描述】:我有数据框,它是左连接的产物。现在我想创建 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
【问题讨论】:
【参考方案1】:我已经从您的示例数据集中创建了数据,并从中创建了一个数据框。您可以使用以下代码:
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()
。 from pyspark.sql import struct
@Shane 如果你的问题得到了回答,你能接受我的回答并关闭这个帖子
我尝试了您的解决方案,但没有得到想要的输出,即 col1 : 1111, col2 : name , detial: col3:,col4: col1 : 1112, col2 : name1 , detial: col3:abcd,col4:def,col3:DEFG,col4:ABXC` 你的代码给了我[u'"data":"col1":1111,"col2":"name","details":', u'"data":"col1":1112,"col2":"name1","details":"col3":"abcd","col4":"def"', u'"data":"col1":1112,"col2":"name1","details":"col3":"DEFG","col4":"ABXC"']
我更新了我的代码。您现在将获得一个字典列表,其中每个字典都具有您想要的结构。
现在我根本没有得到任何输出...我想我需要按 col1 和 col2 以及我需要查看如何组合的详细信息的值进行分组。以上是关于使用 pyspark 从数据框创建 json 结构的主要内容,如果未能解决你的问题,请参考以下文章
如何在pyspark中将rdd行转换为带有json结构的数据框?
pyspark 从 pyspark sql 数据框创建字典数据
在 Pyspark 中从 Rest Api 创建数据框时出错