我目前正在处理一个正则表达式,我想在PySpark Dataframe的列上运行该正则表达式。
这个正则表达式只捕获一个组,但是可能返回几个匹配。我遇到的问题是,PySpark原生正则表达式的函数(regexp_extract和regexp_replace)似乎只允许组操作(通过$操作数)。
有没有办法原生地(PySpark函数,没有python的基于 re.findall 的udf)获取与我的正则表达式匹配的子字符串列表(我不是在谈论包含在firstmatch中的组)?
我希望这样做:
my_regex = '(\w+)'
# Fetch and manipulate the resulting matches, not just the capturing group
df = df.withColumn(df.col_name, regexp_replace('col_name', my_regex, '$1[0] - $2[0]'))
$1表示第一个匹配项,以此类推......
您可以尝试下面的regex输入来查看我希望获取的匹配的示例。
2 AVENUE DES LAPINOUS
它应该返回4个不同的匹配项,每个匹配项包含1个组。
2条答案
按热度按时间vngu2lb81#
在**Spark 3.1+**中,可以使用
regexp_extract_all
regexp_extract_all(str, regexp[, idx])
-提取str
中与regexp
表达式匹配并对应于正则表达式组索引的所有字符串。vbkedwbf2#
遗憾的是,没有办法在spark中获取所有匹配项。您可以使用idx指定匹配的索引
存在一个相同的未合并请求,可在here中找到
TL;DR:到目前为止,您需要为此编写UDF