首页 > 解决方案 > spark scala中lastIndexOf的子字符串

问题描述

我的数据框中有一列包含文件名

test_1_1_1_202012010101101

我想在 lastIndexOf(_) 之后获取字符串我尝试了这个并且它正在工作

val timestamp_df =file_name_df.withColumn("timestamp",split(col("filename"),"_").getItem(4))

但我想让它更通用,这样如果将来文件名中可以​​有任意数量的 _ ,它可以在 lastIndexOf _ 的基础上拆分它

val timestamp_df =file_name_df.withColumn("timestamp", expr("substring(filename, length(filename)-15,17)"))

这也不是通用的,因为字符长度可能会有所不同。

谁能帮助我将 lastIndexOf 函数与 withColumn 一起使用。

标签: scalaapache-spark

解决方案


您可以使用element_at函数 withsplit来获取数组的最后一个元素。

Example:

df.withColumn("timestamp",element_at(split(col("filename"),"_"),-1)).show(false)
+--------------------------+---------------+
|filename                  |timestamp      |
+--------------------------+---------------+
|test_1_1_1_202012010101101|202012010101101|
+--------------------------+---------------+

推荐阅读