【问题标题】:Filter spark DataFrame on string contains在字符串上过滤 spark DataFrame 包含
【发布时间】:2016-06-16 00:10:13
【问题描述】:

我正在使用Spark 1.3.0 和Spark Avro 1.0.0。 我在the example on the repository page 工作。以下代码运行良好

val df = sqlContext.read.avro("src/test/resources/episodes.avro")
df.filter("doctor > 5").write.avro("/tmp/output")

但是如果我需要查看doctor 字符串是否包含子字符串怎么办?因为我们在字符串中编写表达式。我该怎么做才能做一个“包含”?

【问题讨论】:

    标签: scala apache-spark dataframe apache-spark-sql


    【解决方案1】:

    您可以使用contains(这适用于任意序列):

    df.filter($"foo".contains("bar"))
    

    like(类似于 SQL 简单正则表达式的 SQL,_ 匹配任意字符,% 匹配任意序列):

    df.filter($"foo".like("bar"))
    

    或rlike(如Java regular expressions):

    df.filter($"foo".rlike("bar"))
    

    取决于您的要求。 LIKE 和 RLIKE 也应该适用于 SQL 表达式。

    【讨论】:

    • 是上面的scala代码吗?看起来 scala 不喜欢 $ 符号。我导入了import org.apache.spark.sql.functions.lit
    • 斯卡拉。要使$ 工作,您需要import sqlContext.implicits._。您也可以将其替换为df("foo") 或org.apache.spark.sql.functions.col("foo")。
    • pyspark中有类似的功能吗?
    • @oluies 您可以在Column 对象上使用任何这些(like、rlike 直接,包含调用 JVM 方法)。
    • @zero323 执行代码时出错: filt_df = df.filter(\ (col('BARCODE_ID').contains('YH','YN','YP','YT' ,'YW','YY','3A','3G','3H')) & \ (df.UOW_PKG_DELIV_MODE_TYPE_DESC.substr(0,17) != 'SUREPOST REDIRECT')) --> Column not callable 。 . 有什么想法吗?
    【解决方案2】:

    在pyspark中,SparkSql语法:

    where column_n like 'xyz%'
    

    可能不行。

    用途:

    where column_n RLIKE '^xyz' 
    

    这很好用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 2018-11-20
      相关资源
      最近更新 更多