使用 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 数据框创建字典数据

将嵌套的 Json 转换为 Pyspark 中的数据框

在 Pyspark 中从 Rest Api 创建数据框时出错

带有 json 的 Pyspark 数据框,迭代以创建新的数据框

Pyspark 数据帧过滤语法错误