【问题标题】:PySpark DataFrame Filter Column Contains Multiple Value [duplicate]PySpark DataFrame过滤器列包含多个值[重复]
【发布时间】:2020-11-29 11:26:33
【问题描述】:

只是想知道是否有任何有效的方法来过滤包含值列表的列,例如:

假设我要过滤一个包含牛肉的列,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类型,有什么好的方法来实现呢?

【问题讨论】:

    标签: dataframe apache-spark pyspark


    【解决方案1】:
    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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-13
      • 2016-05-13
      • 2021-11-18
      • 2019-06-24
      • 2020-05-02
      • 1970-01-01
      • 2021-05-02
      • 2020-12-08
      相关资源
      最近更新 更多