Dataframe PySpark数据帧筛选器列包含多个值
只是想知道是否有有效的方法来过滤包含值列表的列,例如: 假设我要筛选一个包含beef的列,beef: 我可以做到:Dataframe PySpark数据帧筛选器列包含多个值,dataframe,apache-spark,pyspark,Dataframe,Apache Spark,Pyspark,只是想知道是否有有效的方法来过滤包含值列表的列,例如: 假设我要筛选一个包含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)
beefDF=df.filter(df.ingredients.contains('Beef')|df.ingredients.contains('beef'))
我想创建一个列表,而不是采用上述方法:
beef_product=['Beef','beef']
并且做:
beefDF=df.filter(df.ingredients.contains(beef_product))
我不需要维护代码,只需要在beef_产品列表中添加新的beef(例如ox、ribeyes)即可获得过滤器数据框
显然,contains函数不采用列表类型,实现这一点的好方法是什么?尝试使用
.isin()
接受列表
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|
#+---+-----------+
请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。
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()