Regex 数据帧中带有子字符串和字符的Scala Spark筛选器行

Regex 数据帧中带有子字符串和字符的Scala Spark筛选器行,regex,scala,apache-spark,dataframe,filter,Regex,Scala,Apache Spark,Dataframe,Filter,我想过滤DF中的一些行,保留列以开头的行,并且不包含字符“#” 我可以用两个过滤器做我想做的事: .filter( _!= col("theCol").contains("#")) .filter( col("theCol").startsWith("startSubString")) 但我想知道是否不能在一个过滤器中实现更好的性能: 比如: .filter(col(“theCol”).rlike(“^(startSubString)。*^[^@]”) 尽管此不起作用。我遗漏了什么?我一直在使

我想过滤
DF
中的一些行,保留列
开头的行,并且不包含字符
“#”

我可以用两个过滤器做我想做的事:

.filter( _!= col("theCol").contains("#"))
.filter( col("theCol").startsWith("startSubString"))
但我想知道是否不能在一个过滤器中实现更好的性能:

比如:

.filter(col(“theCol”).rlike(“^(startSubString)。*^[^@]”)

尽管此不起作用。我遗漏了什么?

我一直在使用substr(),但我不明白为什么starsWith()也不起作用,但下面是我所做的

.filter( (!(col("theCol").contains("#"))) && (col("theCol").substr(1,4) === ("http")))

您可以使用startsWith()

.filter( !col("theCol").contains("#") && col("theCol").startsWith("startSubString") )

你可以随时使用| |
.filter(!=col(“theCol”).contains(#”)| | col(“theCol”).startsWith(“http”)
不起作用吗?我会保持原样,我认为它比一个巨大的逻辑表达式更可读。Spark的优化器将组合过滤器,所以我认为您不会获得性能