scala之Spark 数据帧的自定义聚合
powertoolsteam
阅读:203
2025-06-02 22:19:02
评论:0
我想知道是否有某种方法可以为 Spark 数据帧指定自定义聚合函数。如果我有一个包含 2 列 id 和 value 的表,我想 groupBy id 并将值聚合到每个 的列表中值 像这样:
来自:
john | tomato
john | carrot
bill | apple
john | banana
bill | taco
到:
john | tomato, carrot, banana
bill | apple, taco
这在数据框中可能吗?我问的是数据帧,因为我正在将数据作为 orc 文件读取,并且它是作为数据帧加载的。我认为将其转换为 RDD 是低效的。
请您参考如下方法:
我只想简单地使用以下内容:
import org.apache.spark.sql.functions.collect_list
val df = Seq(("john", "tomato"), ("john", "carrot"),
("bill", "apple"), ("john", "banana"),
("bill", "taco")).toDF("id", "value")
// df: org.apache.spark.sql.DataFrame = [id: string, value: string]
val aggDf = df.groupBy($"id").agg(collect_list($"value").as("values"))
// aggDf: org.apache.spark.sql.DataFrame = [id: string, values: array<string>]
aggDf.show(false)
// +----+------------------------+
// |id |values |
// +----+------------------------+
// |john|[tomato, carrot, banana]|
// |bill|[apple, taco] |
// +----+------------------------+
您甚至不需要调用底层的 rdd。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



