在 org.apache.spark.sql.Column 中使用 rlike

rga*_*ber 2 scala rlike apache-spark apache-spark-sql

我正在尝试在 Scala 代码中实现一个查询,该查询使用 Spark 上的正则表达式Column来查找列中包含特定值的所有行,例如:

 column.rlike(".*" + str + ".*")
Run Code Online (Sandbox Code Playgroud)

str是一个字符串,可以是任何内容(除了nullempty)。

这对于我正在测试的基本查询来说效果很好。然而,作为 Spark / Scala 的新手,我不确定是否有任何特殊情况可能会破坏我需要处理的代码。是否有我需要转义的字符或需要担心的特殊情况?

zer*_*323 5

这可能会被任何无效的正则表达式破坏。你甚至不必努力:

Seq("[", "foo", " ba.r ").toDF.filter($"value".rlike(".*" + "[ " + ".*")).show
Run Code Online (Sandbox Code Playgroud)

或者如果str它本身就是一个不平凡的模式,可能会给出意想不到的结果。对于像这样的简单情况,你会更好Column.contains

Seq("[", "foo", " ba.r ").toDF.filter($"value".contains("[")).show
Seq("[", "foo", " ba.r ").toDF.filter($"value".contains("a.r")).show
Run Code Online (Sandbox Code Playgroud)