在 PySpark 中对多个单词使用 LIKE 运算符

Posted

技术标签:

【中文标题】在 PySpark 中对多个单词使用 LIKE 运算符【英文标题】:Using LIKE operator for multiple words in PySpark 【发布时间】:2018-10-19 09:35:19 【问题描述】:

我在PySpark 中有一个 DataFrame df,如下图所示 -

+-----+--------------------+-------+
|   ID|           customers|country|
+-----+--------------------+-------+
|56   |xyz Limited         |U.K.   |
|66   |ABC  Limited        |U.K.   |
|16   |Sons & Sons         |U.K.   |
|51   |TÜV GmbH            |Germany|
|23   |Mueller GmbH        |Germany|
|97   |Schneider AG        |Germany|
|69   |Sahm UG             |Austria|
+-----+--------------------+-------+

我只想保留ID 从 5 或 6 开始的那些行。所以,我希望我的最终数据框看起来像这样 -

+-----+--------------------+-------+
|   ID|           customers|country|
+-----+--------------------+-------+
|56   |xyz Limited         |U.K.   |
|66   |ABC  Limited        |U.K.   |
|51   |TÜV GmbH            |Germany|
|69   |Sahm UG             |Austria|
+-----+--------------------+-------+

这可以通过多种方式实现,这不是问题。但是,我有兴趣了解如何使用LIKE 语句来完成此操作。

如果我只对ID 从 5 开始的那些行感兴趣,它可以像这样轻松完成 -

df=df.where("ID like ('5%')")

我的问题:如何在 where 子句中添加第二条语句,如 "ID like ('6%')"OR - | 布尔值?我想做如下所示的事情,但是这段代码出错了。所以,简而言之,我如何在此处使用 LIKE and .where 使用多个布尔语句 -

df=df.where("(ID like ('5%')) | (ID like ('6%'))")

【问题讨论】:

【参考方案1】:

你可以试试

df = df.where('ID like "5%" or ID like "6%"')

【讨论】:

非常感谢平图。你能告诉我为什么把 ' 换成 " 会成功吗? 诀窍是使用代替|。交换 ' 没有任何影响。 哦,我以为我们必须使用管道 |在 PySpark 和 or 中是不允许的。很惊讶。 pyspark where 语句同时支持数据帧操作和 sql 查询。您(甚至我)使用的那个是 where 中的 sql。因此,这里支持 or 语句。 Mike 建议使用数据框操作,您不能使用 我也认为它可能与 SQL 类型语法有关,而不是与 DataFrame 语法有关。非常感谢平图。很有帮助。【参考方案2】:

这对我有用

from pyspark.sql import functions as F
df.where(F.col("ID").like('5%') | F.col("ID").like('6%'))

【讨论】:

【参考方案3】:

在pyspark中,SparkSql语法:

where column_n like 'xyz%' OR column_n like 'abc%' 

可能不行。

用途:

where column_n RLIKE '^xyz|abc' 

说明:它将过滤所有以abcxyz 开头的单词。

这很好用。

【讨论】:

嗨,“喜欢”对我来说也很完美,而且代码没有损坏。所以,我会继续这样做。感谢您的 cmets。 @cph_sto :是的,它可能适用于少数情况,但在您使用变量替换的情况下,例如 where column_m='%(some_variable)s' 。如果您使用 like 运算符和 % 以及此变量替换然后它将破坏代码,因为 python 会与 % 混淆

以上是关于在 PySpark 中对多个单词使用 LIKE 运算符的主要内容,如果未能解决你的问题,请参考以下文章

使用负索引从pyspark字符串列的最后一个索引中对多个字符进行子字符串

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

regexp_like 选择属性字符串包含多个不同单词的行

使用多个 LIKE 条件时,搜索查询无法按预期工作

Pyspark 数据帧过滤语法错误

是否可以在 Pyspark 中对 DataFrame 进行子类化?