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

如何向Spark DataFrame的数组列中追加元素?附示例场景

解决方案:给Spark DataFrame的数组列追加元素

要给nums列的数组追加元素5,有几种简单的实现方式,根据你的Spark版本可以选择合适的方法:

方法1:使用内置concat函数(Spark 2.4+)

concat函数可以直接拼接两个数组,完美满足咱们追加元素的需求——只需要把原数组和包含目标元素的单元素数组拼在一起就行:

import org.apache.spark.sql.functions.{concat, array, lit}

// 生成结果DataFrame
val resultDF = df1.withColumn("nums", concat($"nums", array(lit(5))))

// 查看结果
resultDF.show()

运行后就能得到你想要的输出:

+---+-------+
| id| nums  |
+---+-------+
|  a| [1,5] |
|  b| [1,5] |
+---+-------+

方法2:使用array_union函数(Spark 2.4+)

如果你确定原数组里不会包含要追加的元素5,也可以用array_union(求两个数组的并集)来实现,效果和上面一样:

import org.apache.spark.sql.functions.{array_union, array, lit}

val resultDF = df1.withColumn("nums", array_union($"nums", array(lit(5))))

⚠️ 注意:如果原数组里已经有5,array_union会自动去重,最终数组里只会保留一个5,而concat会保留重复元素,所以根据你的实际需求选择。

方法3:自定义UDF(兼容Spark 2.4以下版本)

如果你的Spark版本低于2.4,内置数组函数不够丰富,就可以写一个简单的自定义UDF来实现追加逻辑:

import org.apache.spark.sql.functions.udf

// 定义追加元素的UDF
val appendToArr = udf((arr: Seq[Int], elem: Int) => arr :+ elem)

// 应用UDF生成新列
val resultDF = df1.withColumn("nums", appendToArr($"nums", lit(5)))

这个UDF接收原数组和要追加的元素,返回拼接后的新数组,兼容性拉满~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:18:03