Spark Scala: Как использовать подстановочный знак как литерал в выражении LIKE - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть простой случай использования. Я должен использовать подстановочный знак в качестве значения в состоянии LIKE.

Я пытаюсь отфильтровать записи из строкового столбца, который содержит _A_. Это простой LIKE вариант использования оператора. Но так как _ в _A_ является групповым символом, LIKE приведет к неверному результату.

В SQL мы можем использовать ESCAPE для достичь этого. Как я могу добиться этого в Spark?

Я не пробовал Регулярное выражение. Хотел узнать, есть ли какой-нибудь другой более простой обходной путь

Я использую Spark 1.5 с Scala.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Вы можете использовать .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_|
//+------+
1 голос
/ 24 апреля 2020

Если вы можете использовать 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()
  }

}

...