PySpark DataFrame 过滤器列包含多个值

Che*_*ole 4 dataframe apache-spark pyspark

只是想知道是否有任何有效的方法来过滤包含值列表的列,例如:

假设我要过滤一列包含牛肉,Beef:

我可以:

beefDF=df.filter(df.ingredients.contains('Beef')|df.ingredients.contains('beef'))
Run Code Online (Sandbox Code Playgroud)

我不想这样做,而是想创建一个列表:

beef_product=['Beef','beef']
Run Code Online (Sandbox Code Playgroud)

并做:

beefDF=df.filter(df.ingredients.contains(beef_product))
Run Code Online (Sandbox Code Playgroud)

我不需要维护代码,但只需要在 Beef_product 列表中添加新的牛肉(例如牛、肋眼)即可获得过滤数据框。

显然 contains 函数不采用列表类型,实现这一点的好方法是什么?

Shu*_*Shu 8

尝试使用.isin()Accept list

beefDF=df.filter(df.ingredients.isin(beef_product))
Run Code Online (Sandbox Code Playgroud)

Example:

df=spark.createDataFrame([(1,'beef'),(2,'Beef'),(3,'b')],['id','ingredients'])

from pyspark.sql.functions import *
beef_product=['Beef','beef']
df.filter(df.ingredients.isin(beef_product)).show()
#+---+-----------+
#| id|ingredients|
#+---+-----------+
#|  1|       beef|
#|  2|       Beef|
#+---+-----------+
Run Code Online (Sandbox Code Playgroud)