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

问题描述 投票:-1回答:2

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

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

在SQL中,我们可以使用ESCAPE来实现。如何在Spark中实现这一目标?

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

我在Scala中使用Spark 1.5。

提前感谢!

scala apache-spark apache-spark-sql wildcard regexp-like
2个回答
0
投票

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

}


0
投票

在这种情况下,您可以使用.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_|
//+------+
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.