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

如何选取DataFrame中数组类型列的最后一个元素?

提取Spark DataFrame数组列的最后一个元素

没问题,我来帮你搞定这个需求!针对你已经把字符串拆分好的数组列,有两种简单的方法可以提取数组的最后一个元素,直接看解决方案:

方法1:使用element_at函数(Spark 2.4+推荐)

Spark 2.4及以上版本提供了element_at函数,它支持负数索引,直接传入-1就能获取数组的最后一个元素,用法非常简洁:

import org.apache.spark.sql.functions.{col, element_at}

val resultDF = actualDF.withColumn("hit_songs", element_at(col("hit_songs"), -1))
resultDF.show(false)

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

+-------+---------+
|name   |hit_songs|
+-------+---------+
|beatles|jude     |
|romeo  |mia      |
|elvis  |example  |
+-------+---------+

element_at的优势是语义清晰,除了取最后一个元素,还能通过正数索引取任意位置的元素,比如element_at(col("hit_songs"), 1)就能取第一个元素。

方法2:兼容旧版本Spark的写法(Spark 2.3及以下)

如果你用的是更早的Spark版本,没有element_at函数,可以结合size函数计算数组长度,再通过索引访问最后一个元素(数组索引从0开始,所以长度减1):

import org.apache.spark.sql.functions.{col, size}

val resultDF = actualDF.withColumn("hit_songs", col("hit_songs")(size(col("hit_songs")) - 1))
resultDF.show(false)

这个写法同样能得到目标结果,只是需要手动计算索引位置。

两种方法都不需要关心处理后的Schema,完全满足你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:00:58