如何向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
相关产品推荐
相关产品推荐

