SQL 或 Spark (Scala) 中的正则表达式



我是Spark Scala的新开发人员。我不熟悉正则表达式,但我想编写一个可以提取如下 ID 的正则表达式:

abcd_mss5884_mww020_025_b => mss5884
abv_c_e_mss478_mww171_172 => mss478
abv_c_e_mww171_172  => otherwise, return THE SAME input string

因此,在我们的输入字符串中,我应该返回从"mss...."开始的第一个字符。当然,当我在"mss"之后找到第一个"_"时停止(我应该忽略其他下划线(。

请问我该怎么做? 我应该使用正则表达式吗?SQL 中的正则表达式还是 Scala 中的正则表达式? 还是我应该只使用一个简单的子字符串方法?

只需使用regexp_extract函数即可。像这样:

val df = Seq(("abcd_mss5884_mww020_025_b"), ("abv_c_e_mss478_mww171_172"), ("abv_c_e_mww171_172")).toDF("input")
df.withColumn("ID", regexp_extract($"input", "^(.*)(mss[^_]+)_(.*)$", 2))
.withColumn("ID", when($"ID" =!= "", $"ID").otherwise($"input"))
.show()
+-------------------------+------------------+
|input                    |ID                |
+-------------------------+------------------+
|abcd_mss5884_mww020_025_b|mss5884           |
|abv_c_e_mss478_mww171_172|mss478            |
|abv_c_e_mww171_172       |abv_c_e_mww171_172|
+-------------------------+------------------+

最新更新