在 Pyspark 中将多行组合为 JSON 对象
Posted
技术标签:
【中文标题】在 Pyspark 中将多行组合为 JSON 对象【英文标题】:Combine multiple rows as JSON object in Pyspark 【发布时间】:2021-03-03 18:50:57 【问题描述】:我对 pyspark 很陌生,想对数据框执行以下操作。对于具有相似 id 的行,我需要在 JSON 块中组合关联的列。如下例所示,输出应为 1 个 JSON 块,其中包含 secId、名称和路径列。
id | secId | names | path | bin |
---|---|---|---|---|
1 | 12 | [“area” : “en”, “value” : “name1” , “area” : “sp”, “value” : “name2”] | [abc, xyz] | bin1 |
1 | 13 | [“area” : “en”, “value” : “name3” , “area” : “sp”, “value” : “name4”] | [klm, nop] | bin1 |
需要输出为
id | bin | json |
---|---|---|
1 | bin1 | [“secId” : 12,“names” : [“area” : “en”, “value” : “name1” , “area” : “sp”, “value” : “name2”],“path” : [abc, xyz],“secId” : 13,“names” : [“area” : “en”, “value” : “name3” , “area” : “sp”, “value” : “name4”],“path” : [klm, mno]] |
如果有人能提供一些关于这样做的指导方针,那将会很有帮助。
谢谢
【问题讨论】:
请将示例数据以文本而非图像的形式发布。 当然,也用文字更新了问题 查看this question 示例 感谢您的链接。我试图做类似的事情,但是当我做 df.show() 时,我得到:调用 o3426.showString 时发生错误。 :org.apache.spark.SparkException:作业因阶段失败而中止:阶段 143.0 中的任务 3 失败 1 次,最近一次失败:阶段 143.0 中丢失任务 3.0(TID 647,本地主机,执行程序驱动程序):java.lang.AssertionError : 断言失败你知道如何解决这个问题吗? 【参考方案1】:Spark 'struct' 函数用于创建 Scala 映射结构(键 -> 值)。
Spark 'to_json' 函数创建一个 json 结构。
对 id 和 bin 列进行 groupby 并使用 collect_list 函数创建您想要的结果。
import pyspark.sql.functions as F
df.withColumn('json', F.to_json(F.struct("secId", "names", "path"))).groupby('id', 'bin').agg(F.collect_list('json')).show(5, False)
【讨论】:
以上是关于在 Pyspark 中将多行组合为 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章