scala - 如何从 Spark 数据框中删除与正则表达式匹配的行

标签 scala apache-spark dataframe

输入数据框

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/

相关文章:

scala - 如何在Spark 2.X数据集中创建自定义编码器?

java - Spark 历史日志手动解压

performance - 有什么方法可以提高 PySpark 输出的效率吗?

apache-spark - application_的应用报告(YARN上状态: ACCEPTED) never ends for Spark Submit (with Spark 1. 2.0)

scala - 在 Spark 中为每个 Executor 创建数组并组合成 RDD

python - Pandas -基于引用字典重复数据框列

python - 如何使用另一个 numpy 数组修改 pandas 数据框中的所有值

java - 使用指向 HDFS 的 URI 创建文件实例

Scala 主要参与者不匹配 react block 中的案例

python - 如何找到包含间隔的系列/数据帧与给定间隔重叠的位置