You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:21:03