我有一个简单的用例。在类似条件下,我必须使用通配符作为值。
我正在尝试从包含_A_
的字符串列中过滤出记录。它是一个简单的LIKE
语句用例。但是,由于_
中的_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
函数,并使用\\
在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_|
//+------+