Spark Scala中如何对DataFrame进行groupby并合并列表?
解决Spark DataFrame分组合并列表并去重的问题
嗨,我来帮你搞定这个需求!你需要按acct字段分组,把每组的device列表合并后去除重复元素,下面是具体的实现方案:
核心思路
按acct分组后,先收集每组所有的device列表,将嵌套的列表展开成一维列表,最后对列表去重(保留元素首次出现的顺序)。
PySpark 实现代码
from pyspark.sql import functions as F # 基于你的原始DataFrame df进行处理 result_df = df.groupBy("acct") \ .agg(F.array_distinct(F.flatten(F.collect_list("device"))).alias("device")) # 查看结果 result_df.show(truncate=False)
Scala 实现代码
import org.apache.spark.sql.functions.{array_distinct, flatten, collect_list} val resultDF = df.groupBy("acct") .agg(array_distinct(flatten(collect_list("device"))).alias("device")) // 查看结果 resultDF.show(false)
代码解释
groupBy("acct"):按照账号字段对数据分组collect_list("device"):将每个分组内的所有device列表收集起来,得到一个嵌套的二维列表(比如acct=B会得到[[3,4], [3,11,4,9]])flatten:把嵌套的二维列表展开成一维列表(比如变成[3,4,3,11,4,9])array_distinct:去除列表中的重复元素,并且保留元素第一次出现的顺序,刚好匹配你想要的结果格式
内容的提问来源于stack exchange,提问作者Babu
相关产品推荐
相关产品推荐

