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

Spark Scala: How to use wild card as literal in a LIKE statement

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

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

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

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

我在 Scala 中使用 Spark 1.5。

提前致谢!

如果您可以将 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()
  }

}

对于这种情况,您可以使用 .contains(或)like(或)rlike 函数,并使用 \ 中转义 _ 喜欢

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_|
//+------+