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



我在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|
+-----+--------------------+-------+

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

如果我只对ID从 5 开始的那些行感兴趣,它可以很容易地像这样完成——

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

我的问题:如何在子句中添加第二个语句,例如"ID like ('6%')"OR - |布尔值where?我想做类似下面显示的事情,但这段代码给出了一个错误。那么,简而言之,我如何使用LIKE and .where在这里使用多个布尔语句 -

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

你可以试试

df = df.where('ID like "5%" or ID like "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%' 

可能不起作用。

用:

where column_n RLIKE '^xyz|abc' 

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

这工作得很好。

对我来说,这奏效了:

from pyspark.sql.functions import col
df.filter((col("ID").like("5%")) | (col("ID").like("6%")))

最新更新