PySpark DataFrame筛选器列包含多个值

时间:2020-08-09 19:13:35

标签: dataframe apache-spark pyspark

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

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

我可以做到:

beefDF=df.filter(df.ingredients.contains('Beef')|df.ingredients.contains('beef'))

我不想创建上述列表,而是创建一个列表:

beef_product=['Beef','beef']

然后做:

beefDF=df.filter(df.ingredients.contains(beef_product))

我不需要维护代码,只需要在Beef_product列表中添加新的牛肉(例如牛,肋眼)就可以使用过滤器数据框。

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

2 个答案:

答案 0 :(得分:1)

尝试使用 .isin() 接受list

beefDF=df.filter(df.ingredients.isin(beef_product))

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|
#+---+-----------+

答案 1 :(得分:0)

from pyspark.sql.functions import *
df=spark.createDataFrame([(1,'beef'),(2,'Beef'),(3,'Cow'), (3,'Tiger')],  
                         ['id','ingredients'])
df.filter("ingredients in ('Beef','Tiger')").show()