Spark Scala:如何在 LIKE 语句中使用通配符作为文字

Posted

技术标签:

【中文标题】Spark Scala:如何在 LIKE 语句中使用通配符作为文字【英文标题】:Spark Scala: How to use wild card as literal in a LIKE statement 【发布时间】:2020-04-24 07:14:49 【问题描述】:

我有一个简单的用例。 我必须使用通配符作为 LIKE 条件中的值。

我正在尝试从包含 _A_ 的字符串列中过滤掉记录。 它是一个简单的LIKE 语句用例。但是由于 _A_ 中的 _ 是通配符,LIKE 会抛出错误的结果。

在 SQL 中,我们可以使用 ESCAPE 来实现这一点。 我怎样才能在 Spark 中实现这一点?

我没有尝试过正则表达式。想知道是否有其他更简单的解决方法

我正在使用带有 Scala 的 Spark 1.5。

提前致谢!

【问题讨论】:

【参考方案1】:

你可以使用.contains(或)like(或)rlike函数来处理这种情况,并使用\\转义_like

val df=Seq(("apo_A_"),("asda"),("aAc")).toDF("str")

//using like
df.filter(col("str").like("%\\_A\\_%")).show()

//using rlike
df.filter(col("str").rlike(".*_A_.*")).show()

//using contains
df.filter(col("str").contains("_A_")).show()

//+------+
//|   str|
//+------+
//|apo_A_|
//+------+

【讨论】:

【参考方案2】:

如果您可以将 Spark 与 Dataframe 一起使用,那么代码将非常简单

object EscapeChar 

  def main(args: Array[String]): Unit = 
    val spark = Constant.getSparkSess
    import spark.implicits._
    val df = List("_A_","A").toDF()
    df.printSchema()
    df.filter($"value".contains("_A_")).show()
  



【讨论】:

以上是关于Spark Scala:如何在 LIKE 语句中使用通配符作为文字的主要内容,如果未能解决你的问题,请参考以下文章

Scala / Spark:如何将此参数传递给.select语句

使用 Spark 和 Scala 清理大小约为 40GB 的 CSV/Dataframe

如何在 if-else 条件下的列中使用 Spark 值 - Scala

如何在 Databricks 笔记本的 Python 单元中使 DataFrame 可见?

MySQL常见面试题-2

如何在 Oracle 中使 Select 语句更快