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

如何在Scala DataFrame中拆分两个数组列?

问题解决思路

你这么写会触发笛卡尔积:先拆分subject数组得到多行,再对每行的mark数组二次拆分,结果就是每个subject和所有mark强制配对,所以会生成重复的4行数据。

要实现subject和mark按原数组位置一一对应拆分,用下面两种方法即可:

方案1:数组打包后统一拆分

先通过arrays_zip把subject和mark按索引位置打包成结构体数组,再一次性拆分:

df.withColumn("subject_mark", arrays_zip($"subject", $"mark"))
  .withColumn("subject_mark", explode($"subject_mark"))
  .select($"subject_mark.subject", $"subject_mark.mark")

方案2:按索引关联拆分

先对subject带索引拆分,再通过索引提取mark数组对应位置的元素:

df.withColumn("pos_subject", posexplode($"subject"))
  .withColumn("mark", element_at($"mark", $"pos"))
  .select($"col".alias("subject"), $"mark")

这两种方式都能保证subject和mark与原数组的位置完全对应,不会出现乱配对的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:03:20