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

Spark中按key聚合数据集并将对应值汇总为列表的实现咨询

实现方案

你需要用到Spark SQL内置的collect_list聚合函数,按SchoolName和classId两个字段分组后,把同组的StudentId收集为列表即可,以下是两种常用实现方式:

方式1:DataFrame API实现

import org.apache.spark.sql.functions._

val resultDF = myDS
  .groupBy("SchoolName", "classId")
  .agg(collect_list("StudentId").alias("studentIdList"))

// 输出查看结果
resultDF.show(false)

方式2:类型安全的Dataset API实现

import org.apache.spark.sql.functions._

case class AggResult(SchoolName: String, classId: Int, studentIdList: List[Long])

val resultDS = myDS
  .groupByKey(row => (row.SchoolName, row.classId))
  .agg(collect_list[Long]("StudentId").as[List[Long]])
  .map{ case ((school, clsId), idList) => AggResult(school, clsId, idList) }

// 输出查看结果
resultDS.show(false)

补充说明

  • 如果需要去重后的学生ID列表,可以把collect_list替换为collect_set
  • 你示例里期望结果的学校名称和classId对应关系存在笔误,实际运行后会匹配输入数据集的真实分组:School1+1对应[100],School1+2对应[110,200],School2+3对应[300]

内容的提问来源于stack exchange,提问作者CoolGoose

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:15:03