【问题标题】:Filter df when values matches part of a string in pyspark当值与pyspark中字符串的一部分匹配时过滤df
【发布时间】:2017-06-12 21:34:35
【问题描述】:

我有一个大的pyspark.sql.dataframe.DataFrame,我想保留(所以filter)保存在location 列中的URL 包含预先确定的字符串的所有行,例如'google.com'。

我试过了:

import pyspark.sql.functions as sf
df.filter(sf.col('location').contains('google.com')).show(5)

但这会引发

TypeError: _TypeError: 'Column' object is not callable'

如何正确过滤我的 df?提前谢谢了!

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql


    【解决方案1】:

    Spark 2.2 以后

    df.filter(df.location.contains('google.com'))
    

    Spark 2.2 documentation link


    Spark 2.1 及之前的版本

    您可以在filter中使用普通SQL

    df.filter("location like '%google.com%'")
    

    使用 DataFrame 列方法

    df.filter(df.location.like('%google.com%'))
    

    Spark 2.1 documentation link

    【讨论】:

    • 嗨,Srinivas,如果我们必须检查两个单词,比如说google.comamazon.com 使用like,该怎么办?我们该怎么做?
    • @cph_bon:有很多方法可以做到。 SQL df.filter("location like '%google.com%' AND location like '%amazon.com%'")DataFrame df.filter("location like '%google.com%'").filter("location like '%amazon.com%'")
    • @mrsrinivas,我们要在所有列中搜索“like 'ID'”的内容。例如,daframe 具有包含单词“ID”的所有列
    【解决方案2】:

    pyspark.sql.Column.contains() 仅在 pyspark 2.2 及更高版本中可用。

    df.where(df.location.contains('google.com'))
    

    【讨论】:

      【解决方案3】:

      当使用字符串值过滤 DataFrame 时,我发现 pyspark.sql.functions lowerupper 会派上用场,如果您的数据可以包含“foo”和“Foo”等列条目:

      import pyspark.sql.functions as sql_fun
      result = source_df.filter(sql_fun.lower(source_df.col_name).contains("foo"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        相关资源
        最近更新 更多