PySpark DataFrame过滤列包含多个值

4

请问有没有有效的方法来筛选包含一组值的列,例如:

假设我想要筛选包含beef、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个回答

8

尝试使用.isin(),它接受list

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

示例:

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
我认为这并没有回答问题,因为 .isin() 方法寻找的是确切的匹配,而不是查找一个字符串是否包含某个值。 - Eduard Jesko

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()

2
请勿仅发布代码作为答案,还需提供说明您的代码是如何解决问题的。带有解释的答案通常更有帮助、质量更高,并更容易获得赞同。 - Mark Rotteveel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接