只是想知道是否有任何有效的方法来过滤包含值列表的列,例如:
假设我要过滤包含牛肉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函数不采用列表类型,什么是实现此目的的好方法?
答案 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()