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

Dataframe 在PySpark中对多个单词使用LIKE运算符,dataframe,pyspark,where,sql-like,Dataframe,Pyspark,Where,Sql Like,我在PySpark中有一个数据帧df,如下所示- +-----+--------------------+-------+ | ID| customers|country| +-----+--------------------+-------+ |56 |xyz Limited |U.K. | |66 |ABC Limited |U.K. | |16 |Sons & Sons |U.K. |

我在
PySpark
中有一个数据帧
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|
+-----+--------------------+-------+
df=df.where("ID like ('5%')")
这可以通过多种方式实现,这不是问题。但是,我有兴趣学习如何使用
LIKE
语句来实现这一点

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

+-----+--------------------+-------+
|   ID|           customers|country|
+-----+--------------------+-------+
|56   |xyz Limited         |U.K.   |
|66   |ABC  Limited        |U.K.   |
|51   |TÜV GmbH            |Germany|
|69   |Sahm UG             |Austria|
+-----+--------------------+-------+
df=df.where("ID like ('5%')")
我的问题:如何在
where
子句中添加第二个语句,如
“ID like('6%”)
或-
布尔值?我想做如下所示的事情,但这段代码给出了一个错误。所以,简而言之,我如何使用多个布尔语句,使用
像and.where
-

df=df.where("(ID like ('5%')) | (ID like ('6%'))")
你可以试试

df=df.where('ID像“5%”或ID像“6%”)

这对我来说很有用

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

在pyspark中,SparkSql语法:

where column_n like 'xyz%' OR column_n like 'abc%' 
可能不行

使用:

说明:它将过滤所有以
abc
xyz
开头的单词


这个很好用。

非常感谢你的品脱。你能告诉我为什么用“替换”来做这个把戏吗?这个把戏是使用或代替|。替换“没有任何影响。哦,我认为我们必须在PySpark中使用管道|,并且不允许使用或。惊讶。PySpark where语句既支持数据帧操作,也支持sql查询。你(甚至我)也支持的那个使用的是where中的sql。所以,这里支持or语句。Mike建议使用dataframe操作,而您不能使用or。我也认为这可能与sql类型语法有关,而不是dataframe one。非常感谢。非常有帮助。嗨,“like”对我来说也非常有效,代码也没有“没有中断。因此,我将继续使用它。谢谢您的评论。@cph\u sto:是的,它可能适用于少数情况,但适用于使用变量替换的情况,例如,列\u m='(某些变量)s'。如果将like运算符与%一起使用,那么它将中断代码,因为python将与%