pyspark dataframe filter列包含多个值

kq4fsx7k  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(1010)

这个问题在这里已经有答案了

pysparkDataframe过滤器或基于列表的包含(3个答案)
5个月前关门了。
只是想知道是否有有效的方法来过滤包含值列表的列,例如:
假设我要过滤一个包含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\u产品列表中添加新的beef(例如,ox,ribeyes)就可以拥有filter dataframe。
显然contains函数不采用列表类型,有什么好的实现方法?

ltskdhd1

ltskdhd11#

尝试 .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|

# +---+-----------+
vlurs2pr

vlurs2pr2#

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

相关问题