我在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
。有什么办法解决吗?
答案 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()