【问题标题】:Pyspark dataframe LIKE operatorPyspark 数据框 LIKE 运算符
【发布时间】:2017-03-06 09:06:57
【问题描述】:

Pyspark 中 LIKE 运算符的等价物是什么? 例如我想做:

SELECT * FROM table WHERE column LIKE "*somestring*";

寻找像这样简单的东西(但这不起作用):

df.select('column').where(col('column').like("*s*")).show()

【问题讨论】:

标签: pyspark spark-dataframe


【解决方案1】:

您可以使用wherecol 函数来做同样的事情。 where 将用于根据条件过滤数据(这里是,如果列类似于'%string%')。 col('col_name') 用于表示条件,like 是运算符:

df.where(col('col1').like("%string%")).show()

【讨论】:

  • 您可以使用 where 和 col 函数来做同样的事情。 where 将用于根据条件过滤数据(这里是,如果列类似于 '%s%')。 col('col_name') 用于表示条件,like 是运算符。
【解决方案2】:

使用 spark 2.0.0 及以下版本也可以正常工作:

df.select('column').where("column like '%s%'").show()

【讨论】:

  • 有什么方法可以包含多个检查 - 我想同时检查 '%s%''%r%',但我只想像你一样使用 LIKE 运算符。
  • df.select('column').where('(col("foo").like("%s%") & (col("bar").like("%s%")') 你在找这样的东西吗?
  • 这正是我想要的。
  • 太棒了!完成忘记投票:D 评论和/或回答
  • 昨天自己对你的答案投了赞成票,现在也对你的评论投了赞成票:)
【解决方案3】:

使用like 运算符。

https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#module-pyspark.sql.functions

df.filter(df.column.like('%s%')).show()

【讨论】:

    【解决方案4】:

    嗯...应该有像regexp这样的sql ->

    df.select('column').where(col('column').like("%s%")).show()
    

    【讨论】:

      【解决方案5】:

      要复制不区分大小写的ILIKE,您可以将lowerlike 结合使用。

      from pyspark.sql.functions import lower
      
      df.where(lower(col('col1')).like("%string%")).show()
      

      【讨论】:

        【解决方案6】:

        在 pyspark 中,您始终可以将数据框注册为表格并进行查询。

        df.registerTempTable('my_table')
        query = """SELECT * FROM my_table WHERE column LIKE '*somestring*'"""
        sqlContext.sql(query).show()
        

        【讨论】:

        • 在 Spark 2.0 和更新版本中使用 createOrReplaceTempView,而 registerTempTable 已被弃用。
        【解决方案7】:

        使用spark 2.4, 否定你可以简单地做:

        df = df.filter("column not like '%bla%'")
        

        【讨论】:

          【解决方案8】:

          这对我有用:

          import pyspark.sql.functions as f
          df.where(f.col('column').like("%x%")).show()
          

          【讨论】:

            【解决方案9】:

            我总是使用 UDF 来实现这样的功能:

            from pyspark.sql import functions as F 
            like_f = F.udf(lambda col: True if 's' in col else False, BooleanType())
            df.filter(like_f('column')).select('column')
            

            【讨论】:

            • 虽然功能正常,但使用 python UDF 会比使用列函数 like(...) 慢。这样做的原因是使用 pyspark UDF 要求数据在 JVM 和 Python 之间进行转换。此外,数据帧引擎无法使用 pyspark UDF 优化计划,也无法使用其内置函数优化计划。
            猜你喜欢
            • 2017-03-10
            • 2021-12-24
            • 1970-01-01
            • 2018-12-13
            • 2020-10-26
            • 1970-01-01
            • 1970-01-01
            • 2011-07-08
            • 1970-01-01
            相关资源
            最近更新 更多