Регулярное выражение в SQL или Spark (Scala) - PullRequest
0 голосов
/ 06 февраля 2020

Я новый разработчик в Spark Scala. Я не знаком с Regex, но я хочу написать регулярное выражение, которое может извлечь идентификатор следующим образом:

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? Или я должен просто использовать простой метод подстроки ??

1 Ответ

0 голосов
/ 06 февраля 2020

Просто используйте функцию 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|
+-------------------------+------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...