gpt4 book ai didi

python-3.x - PySpark:如何从 spark 数据框创建嵌套的 JSON?

转载 作者:行者123 更新时间:2023-12-05 00:48:06 25 4
gpt4 key购买 nike

我正在尝试从我的 spark 数据框中创建一个嵌套的 json,该数据帧具有以下结构的数据。下面的代码正在创建一个带有键和值的简单 json。你能帮忙吗

df.coalesce(1).write.format('json').save(data_output_file+"createjson.json", overwrite=True)

更新1:根据@MaxU 的回答,我将 spark 数据框转换为 pandas 并使用 group by。它将最后两个字段放入嵌套数组中。我如何首先将类别和计数放入嵌套数组中,然后在该数组中放入子类别和计数。

示例文本数据:

Vendor_Name,count,Categories,Category_Count,Subcategory,Subcategory_Count
Vendor1,10,Category 1,4,Sub Category 1,1
Vendor1,10,Category 1,4,Sub Category 2,2
Vendor1,10,Category 1,4,Sub Category 3,3
Vendor1,10,Category 1,4,Sub Category 4,4

j = (data_pd.groupby(['vendor_name','vendor_Cnt','Category','Category_cnt'], as_index=False)
.apply(lambda x: x[['Subcategory','subcategory_cnt']].to_dict('r'))
.reset_index()
.rename(columns={0:'subcategories'})
.to_json(orient='records'))

enter image description here

[{
"vendor_name": "Vendor 1",
"count": 10,
"categories": [{
"name": "Category 1",
"count": 4,
"subCategories": [{
"name": "Sub Category 1",
"count": 1
},
{
"name": "Sub Category 2",
"count": 1
},
{
"name": "Sub Category 3",
"count": 1
},
{
"name": "Sub Category 4",
"count": 1
}
]
}]

最佳答案

您需要为此重新构建整个数据框。

"subCategories"是一个结构体类型。

from pyspark.sql import functions as F
df.withColumn(
"subCategories",
F.struct(
F.col("subCategories").alias("name"),
F.col("subcategory_count").alias("count")
)
)

然后,groupBy 并使用 F.collect_list 创建数组。

最后,您只需在数据框中包含 1 条记录即可获得您期望的结果。

关于python-3.x - PySpark:如何从 spark 数据框创建嵌套的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53477724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com