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

