输入数据框
import spark.implicits._
val ds = Seq((1,"play Framwork"),
(2,"Spark framework"),
(3,"spring framework")).toDF("id","subject")
我可以使用任何正则表达式,并且我的函数应该从与正则表达式标记匹配的数据框中删除这些行
。
假设我的正则表达式是^play.*,那么我的函数应该删除第一行并产生以下结果。
val exp = Seq((2,"Spark framework"),
(3,"spring framework")).toDF("id","subject")
我正在考虑使用如下的函数
def clearValueUsingRegex(dataFrame: DataFrame, token: String, columnsToBeUpdated: List[String]) = {
Logger.debug(s"Inside clearValueUsingRegex : token :$token , columnsToBeUpdated : $columnsToBeUpdated")
if (isValidRegex(token)) {
columnsToBeUpdated.foldLeft(dataFrame) {
(dataset, columnName) =>
dataset.withColumn(columnName, regexp_replace(col(columnName), token, ""))
}
} else {
throw new NotValidRegularExpression(s"$token is not valid regex.")
}
}
但是这个函数的问题是它只替换特定的单元格值,而不是按照我的预期结果删除整个行。
最佳答案
您可以使用过滤功能。
df.filter($"columnName" rlike "^play.*")
http://spark.apache.org/docs/2.3.0/api/java/index.html?org/apache/spark/sql/Dataset.html
关于scala - 如何从 Spark 数据框中删除与正则表达式匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51153899/