gpt4 book ai didi

scala - Spark 数据帧的自定义聚合

转载 作者:行者123 更新时间:2023-12-01 23:04:43 25 4
gpt4 key购买 nike

我想知道是否有某种方法可以为 Spark 数据帧指定自定义聚合函数。如果我有一个包含 2 列 idvalue 的表,我想 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

关于scala - Spark 数据帧的自定义聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37715608/

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