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

时间:2017-01-26 06:51:12

标签: apache-spark-sql

我想从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]

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

4 个答案:

答案 0 :(得分:3)

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

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

此处[0]为您提供反转数组的第一个元素,它是初始数组的最后一个元素。

答案 1 :(得分:2)

您可以使用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中的拆分功能可以应用于DataFrame的一列。

答案 2 :(得分:2)

请检查substring_index,它应该完全可以正常运行:

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

答案 3 :(得分:0)

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