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