【问题标题】:Apply multiple LIKE filters for a Dataframe为数据框应用多个 LIKE 过滤器
【发布时间】:2022-08-24 20:48:51
【问题描述】:

regexp_like 在 Spark SQL 中是否有更好的实现如下

SELECT col1,
       col2
FROM fact_table
WHERE UPPER((TRIM(NAME))) LIKE \'VAL1 %\'
  OR UPPER((TRIM(NAME))) LIKE \'% VAL1 %\'
  OR UPPER((TRIM(NAME))) =\'VAL1\'
  OR UPPER((TRIM(NAME))) LIKE \'VAL1-%\'
  OR UPPER((TRIM(NAME))) LIKE \'VAL2 %\'
  OR UPPER((TRIM(NAME))) LIKE \'% VAL2 %\'
  OR UPPER((TRIM(NAME)))=\'VAL2\'
  OR UPPER((TRIM(NAME))) LIKE \'VAL2-%\' 

    标签: sql apache-spark


    【解决方案1】:

    在原始 SQL 编号中。使用 Dataframe API,您可以使用更高级别的函数来组合过滤器表达式:

    val filterExpr = Seq("%VAL1 %", "% VAL1%", "VAL1" /* ... */)
                       .map(x => upper(trim($"name")).like(x))
                       .reduce(_ || _)
    val df = Seq("MYVAL1 X", "FOO", "val1", "AVAL1").toDF("name").filter(filterExpr).show
    
    +--------+
    |    name|
    +--------+
    |MYVAL1 X|
    |    val1|
    +--------+
    

    或者,您也可以编写 UDF。

    【讨论】:

      猜你喜欢
      • 2014-08-06
      • 1970-01-01
      • 2018-02-09
      • 2016-10-01
      • 1970-01-01
      • 2020-05-04
      • 2021-05-02
      • 2014-05-28
      相关资源
      最近更新 更多