【发布时间】:2019-11-19 09:41:58
【问题描述】:
我目前正在处理一个我想在 PySpark Dataframe 的列上运行的正则表达式。
此正则表达式仅用于捕获一个组,但可以返回 几个 匹配项。 我遇到的问题是 PySpark 原生正则表达式的函数(regexp_extract 和 regexp_replace)似乎只允许组操作(通过 $ 操作数)。
有没有办法本地(PySpark 函数,没有基于 python 的 re.findall 的 udf)获取与我的正则表达式匹配的子字符串列表(我不是在谈论包含在第一个匹配)?
我想做这样的事情:
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 表示第一个匹配为一个数组,以此类推...
您可以尝试以下正则表达式输入来查看我希望获取的匹配示例。
2 AVENUE DES LAPINOUS
它应该返回 4 个不同的匹配项,每个匹配项包含 1 个组。
【问题讨论】:
-
我正在更新正则表达式,以后会更容易掌握。
-
不幸的是,没有办法获得所有匹配项。您可以使用
func.regexp_extract('col', my_regex, idx=1)指定匹配索引。您需要为此编写一个UDF。.. -
here 是一个已经提出的问题..
-
好吧,这很遗憾,但感谢您提出这一点。我希望它们不会持续太久来发布它,感觉就像玩正则表达式时必须具备的一样。那么UDF就是...
标签: python regex apache-spark pyspark pyspark-dataframes