Как удалить строки из фрейма данных искры, который соответствует регулярному выражению - PullRequest
0 голосов
/ 03 июля 2018

Входной фрейм данных

import spark.implicits._

val ds = Seq((1,"play Framwork"),
  (2,"Spark framework"),
  (3,"spring framework")).toDF("id","subject")

Я мог бы использовать любое регулярное выражение , а функция my должна remove those rows из кадра данных, соответствующего токену регулярного выражения.

Предположим, что мое регулярное выражение равно ^ 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.")
}

} * * тысяча двадцать-один

Но проблема с этой функцией заключается в том, что она заменяет только конкретное значение ячейки, а не удаляет всю строку как ожидаемый результат.

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете использовать функцию фильтра.

df.filter($"columnName" rlike "^play.*")

http://spark.apache.org/docs/2.3.0/api/java/index.html?org/apache/spark/sql/Dataset.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...