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字符串匹配多个精确单词正则表达式的有效方法的主要内容,如果未能解决你的问题,请参考以下文章