pyspark字符串匹配多个精确单词正则表达式的有效方法

Posted

技术标签:

【中文标题】pyspark字符串匹配多个精确单词正则表达式的有效方法【英文标题】:pyspark string match multiple exact words regular expression efficient way 【发布时间】:2021-07-20 00:18:57 【问题描述】:

有一个 pyspark 数据框,其中一列 title 是所有字符串。需要找到包含以下任何单词列表['Cars','Car','Vehicle','Vehicles'] 的所有行。 需要过滤以仅从该列表中查找仅包含单词的行。 一种方法是:

filter_1 = "title like '%' or title like '%' or title like '%' or title like '%'"\
    .format('Car','Cars','Vehicle','Vehicles')
    
df1 = df.filter(filter_1).select('id','title')

这不是一种简洁的写作方式。 尝试使用正则表达式:

df2 = df.where('title rlike "\bCars?\b|\bVehicles?\b"').select('id','title')

只需要匹配确切的单词,例如“Car”而不是“sCar”或“Carry”。 但 df2 为空。

还尝试了How to efficiently check if a list of words is contained in a Spark Dataframe? 仍有一些额外的字符串,如“sCar”或“Carry”。 有什么建议吗?

【问题讨论】:

【参考方案1】:

使用 where 过滤 df。为此,请使用 | 加入搜索词

s='|'.join(["(" + c +")" for c in l])
df.where(df['title'].rlike(s)).show()

【讨论】:

只配车怎么样,不配carry或者scar之类的?

以上是关于pyspark字符串匹配多个精确单词正则表达式的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:\B 匹配不是单词开头或结束的位置

正则表达式匹配一个精确的单词,它的前面或后面只能有空格等

Javascript RegExp 用于精确匹配具有特殊字符的多个单词

如何在正则表达式中匹配多个单词

正则表达式

在 PySpark 中提取多个正则表达式匹配项