首页 > 解决方案 > Spark Scala 带分隔符的子字符串

问题描述

我是 Spark 和 Scala 的新手,我想问你一个问题:

我的数据库中有一个 city 字段(我已经将它加载到 DataFrame 中)具有这种模式:"someLetters" + " - " + id + ')'.
示例:

ABDCJ - 123456)   
AGDFHBAZPF - 1234567890)

字段的大小不固定,id可以是 6 位或 10 位的整数。所以,我想做的是id在一个名为city_id.
具体来说,我想从数字的最后一个字符“)”开始,忽略它并提取整数,直到找到一个空格。然后断。

我已经尝试使用withColumnor a regexor evensubString index但我感到困惑,因为它们基于我无法在此处使用的索引。

我怎样才能解决这个问题?

标签: scalaapache-sparkapache-spark-sql

解决方案


从数字的最后一个字符')'开始,忽略它并提取整数,直到我找到一个空格

这可以使用正则表达式模式来完成.*?(\\d+)\\)$,其中\\)$匹配)字符串末尾的 ,然后用 捕获数字\\d+,并将其提取为新列;注意.*?惰性(由于?)匹配一个字符串,直到(\\d+)\\)$找到模式:

df.withColumn("id", regexp_extract($"city", ".*?(\\d+)\\)$", 1)).show
+--------------------+----------+
|                city|        id|
+--------------------+----------+
|     ABDCJ - 123456)|    123456|
|AGDFHBAZPF - 1234...|1234567890|
+--------------------+----------+

推荐阅读