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

Spark(Scala):还原DataFrame中explode操作后的结构

还原Spark DataFrame的数组列(从explode后的结构恢复)

没问题,要把explode后的DataFrame还原成初始带数组类型Emails列的结构,你可以用groupBy结合collect_list函数来实现,这正好是explode的反向操作。

具体实现代码(Scala)

import org.apache.spark.sql.functions.collect_list

val dfRestored = dfExplode
  .groupBy("Key", "PassportNum", "Age")  // 按所有非Email的列分组,这些列在原数据中是每组唯一的
  .agg(collect_list("Email").alias("Emails"))  // 把分组内的Email收集成数组,并重命名为原列名Emails

效果说明

执行这段代码后,dfRestored的结构就会和你初始的DataFrame完全一致:

KeyEmailsPassportNumAge
0001[Alan@gmail,Alan@hotmail]passport123
0002[Ben@gmail,Ben@hotmail]passport228

注意点

  • 确保groupBy包含所有不需要聚合的列(也就是原数据中每个Key对应的唯一值列),这样分组后不会丢失任何原有信息。
  • 如果你的自定义操作可能导致重复的Email,可以用collect_set代替collect_list来去重,但根据你的描述,这里用collect_list就能准确还原原数组的顺序和内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:34:44