dataframe - PySpark DataFrame 过滤器列包含多个值

标签 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函数不接受list类型,有什么好的实现方式吗?

最佳答案

尝试使用 .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|
#+---+-----------+

关于dataframe - PySpark DataFrame 过滤器列包含多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63330350/

相关文章:

r - 从一个字符串变量创建多个虚拟变量

python - Pandas 从 python 中的日期字符串列获取日期值

scala - 使用 Scala for Spark 编写 Parquet 文件,无需将 Spark 作为依赖项

apache-spark - 如何使用 PySpark 的 JDBC 覆盖数据而不会丢失架构?

python - 在pyspark中加载大于内存的hdf5文件

python - Pandas Holidays to Dataframe with Holiday Name

python - 根据需要创建尽可能多的列,并使用它们将 .apply() 的输出放置在 Pandas 数据框中

amazon-ec2 - 远程提交作业到 Spark EC2 集群

apache-spark - Spark 将输出写入固定宽度

apache-spark - 使用 Azure Synapse Analytics notebook 将数据写入 Azure Data Lake Storage Gen 2