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

Scala中如何基于dense_rank列生成数据集另一列的数组

要实现将同一member_id和plan_id下的err_cd合并为逗号分隔字符串或数组的需求,无需依赖之前的窗口函数逻辑,直接通过分组聚合即可高效完成,以下是具体实现方案:

方案1:生成逗号分隔的字符串列

直接使用groupBy按member_id和plan_id分组,配合concat_ws和collect_list聚合函数合并err_cd:

val resultDF = enrollmentData
  .groupBy($"member_id", $"plan_id")
  .agg(concat_ws(",", collect_list($"err_cd")).alias("error_codes"))

方案2:生成数组类型列

如果需要保留数组格式而非字符串,直接使用collect_list即可:

val resultDFWithArray = enrollmentData
  .groupBy($"member_id", $"plan_id")
  .agg(collect_list($"err_cd").alias("error_codes"))

注意事项:保持顺序

如果需要合并后的err_cd按特定顺序排列(比如原数据中的err_cd升序),可以用collect_ordered替代collect_list,它会保证聚合后的元素顺序:

val sortedResultDF = enrollmentData
  .groupBy($"member_id", $"plan_id")
  .agg(concat_ws(",", collect_ordered($"err_cd")).alias("error_codes"))

说明:你之前定义的窗口函数windowSpec1和windowSpec2以及生成的rk、error_index列对于当前需求是冗余的,直接分组聚合就可以得到期望的输出结果,代码更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:39:19