从 Apache Spark SQL split() 函数中获取最后一个元素



我想从 Array 中获取从 Spark SQL split() 函数返回的最后一个元素。

split(4:3-2:3-5:4-6:4-5:2,'-')

我知道它可以过得去

split(4:3-2:3-5:4-6:4-5:2,'-')[4]

但是当我不知道数组的长度时,我想要另一种方式.请帮助我。

你也可以在 Split() 之后的列上使用 SparkSql Reverse() 函数。例如:

SELECT reverse(split(MY_COLUMN,'-'))[0] FROM MY_TABLE

在这里,[0]为您提供了反向数组的第一个元素,这是初始数组的最后一个元素。

请检查它substring_index应该完全按照您想要的方式工作:

substring_index(lit("1-2-3-4"), "-", -1) // 4

您可以使用 UDF 来执行此操作,如下所示:

val df = sc.parallelize(Seq((1L,"one-last1"), (2L,"two-last2"), (3L,"three-last3"))).toDF("key","Value")
+---+-----------+
|key|Value      |
+---+-----------+
|1  |one-last1  |
|2  |two-last2  |
|3  |three-last3|
+---+-----------+
val get_last = udf((xs: Seq[String]) => Try(xs.last).toOption)
val with_just_last = df.withColumn("Last" , get_last(split(col("Value"), "-")))
+---+-----------+--------+
|key|Value      |Last    |
+---+-----------+--------+
|1  |one-last1  |last1   |
|2  |two-last2  |last2   |
|3  |three-last3|last3   |
+---+-----------+--------+

请记住,SparkSQL中的split函数可以应用于DataFrame的列。

如果您使用的是Java,请使用split(MY_COLUMN,'-').getItem(0)

相关内容

  • 没有找到相关文章

最新更新