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

Apache Spark 3.3.2:分组聚合时如何自动包含所有字段?

解决方案

你可以通过将所有列打包成一个结构体(struct),再对该结构体使用collect_set来实现无需逐个指定列的需求,具体代码如下:

import org.apache.spark.sql.functions.{collect_set, struct}

val df: Dataset[Row] = ???

// 获取所有列并打包成struct
val allColsStruct = struct(df.columns.map(col): _*)

df
  .groupBy($"someKey")
  .agg(collect_set(allColsStruct).alias("all_columns_set"))

说明

  • df.columns.map(col)会自动把DataFrame的所有列名转换成列表达式,不用手动逐一列举。
  • struct(...)将所有列打包为一个结构体字段,collect_set会收集每组的完整结构体实例,自然包含所有列(包括分组键someKey)。
  • 如果后续需要展开结果里的结构体,可以用select($"someKey", explode($"all_columns_set").alias("cols")),再结合cols.*取出各列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:01:59