gpt4 book ai didi

java - 如果 Spark 数据集中的记录键相同,如何创建值列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:59 25 4
gpt4 key购买 nike

我有一个具有以下架构的 Spark 数据集。

Spark 版本 2.2 和 java 版本 1.8。

df.printSchema()

                 root
|-- PROP: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- PVAL: string (nullable = true)
| | |-- _NAME: string (nullable = true)

df.show()

       [[200 Hours,displayName],[f44066,feature.id], [f48062,feature.id],[f30079,feature.id], [f30078,feature.id], [f30077,feature.id],[text1,description]]
[[300 Hours,displayName],f44022,feature.id], [f48033,feature.id],[f30044,feature.id], [f30055,feature.id], [f30066,feature.id],[text2,description]]

基本上,只要名称相同,就需要每个记录级别的值列表。在上面的数据集中,feature.id 相同,因此需要记录级别的值列表。

预期数据集

       [200 Hours,displayName],[[f44066,f48062,f30079,f30078,f30077],feature.id],[text1,description]
[300 Hours,displayName],[[f44022,f48033,f30044,f30055,f30066],feature.id],[text2,description]

有人可以帮忙吗?

最佳答案

explodecollect_list 的组合应该会为您提供所需的输出

import org.apache.spark.sql.functions._
df.withColumn("sno", monotonically_increasing_id())
.select(col("sno"), explode(col("PROP")).as("PROP"))
.select(col("sno"), col("PROP.*"))
.groupBy("sno", "_NAME")
.agg(collect_list("PVAL").as("PVAL"))
.groupBy("sno")
.agg(collect_list(struct("PVAL", "_NAME")).as("PROP"))
.drop("sno")

.

关于java - 如果 Spark 数据集中的记录键相同,如何创建值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50889714/

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