SparkSQL在首次出现字符串时将字符串拆分

时间:2019-05-07 18:14:51

标签: apache-spark apache-spark-sql user-defined-functions

我在Spark DataFrame中有一个名为field的String列,如下所示:

  

my_field_name:abc_def_ghi

我想剥离my_field_name部分,只留下值。通常,我会使用udf并使用子字符串函数,但是我想知道是否有一种方法可以使用SparkSQL函数来执行此操作,以便在序列化udf时不会招致其他SerDe。这是我的尝试:

.withColumn("fieldVals", split(substring($"field", instr($"field", "?"), len($"field")), ""))

问题是split期望有一个Int,而我却给了它一个Int Column。有什么办法解决吗?

1 个答案:

答案 0 :(得分:1)

使用regexp_extract

val df = Seq("my_field_name:abc_def_ghi").toDF("field")
df.select(regexp_extract($"field", ":(.*)", 1) as "col").show()

输出:

+-----------+
|        col|
+-----------+
|abc_def_ghi|
+-----------+

或者使用substring_index

df.select(substring_index($"field", ":", -1) as "col").show()

split

df.select(split($"field", ":").getItem(1) as "col").show()