Как заменить значения столбца данных в пустой строке, которая соответствует входному значению? - PullRequest
0 голосов
/ 02 июля 2018

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

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

Ожидаемый фрейм данных

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

Здесь значение play Framwork заменяется пустой строкой, если моя строка поиска равна play Framwork.

если моя строка поиска равна play, она не должна заменять значение в ячейке.

когда я использую функцию ниже

def replaceUsingRegEx(dataset: DataFrame, ColumnToBeTransformed: String, searchString: String): DataFrame = {
dataset.withColumn(ColumnToBeTransformed, regexp_replace(col(ColumnToBeTransformed), "(?i)" + searchString, ""))

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

фактически заменяет значение play на пустое следующим образом.

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

что не является ожидаемым поведением. Я хочу заменить значение ячейки, только когда строка поиска полностью соответствует значению ячейки.

Как я могу изменить функцию regexp_replace для достижения нужного мне результата.

Ответы [ 2 ]

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

def replaceUsingRegEx (набор данных: DataFrame, ColumnToBeTransformed: String, searchString: String): DataFrame = { dataset.withColumn (ColumnToBeTransformed, regexp_replace (col (ColumnToBeTransformed), searchString, ""))

Хотя в вашем сценарии нет смысла использовать reg ex, вы можете вместо этого использовать условное выражение. Но по вашему запросу вы можете использовать reg ex для достижения этой цели.

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

Я хочу заменить значение ячейки, только когда строка поиска полностью соответствует значению ячейки.

Вместо функции regexp_replace вы можете использовать функцию when/otherwise как

def replaceUsingRegEx(dataset: DataFrame, ColumnToBeTransformed: String, searchString: String): DataFrame = {
  dataset.withColumn(ColumnToBeTransformed, when(col(ColumnToBeTransformed) === searchString, "").otherwise(col(ColumnToBeTransformed)))
}

Таким образом, вызывая функцию как

replaceUsingRegEx(ds, "subject", "play Framwork").show(false)

должен дать вам

+---+----------------+
|id |subject         |
+---+----------------+
|1  |                |
|2  |Spark framework |
|3  |spring framework|
+---+----------------+

Обратите внимание, что вышеупомянутая функция чувствительна к регистру , вы можете приравнять строчные буквы, если вы хотите игнорировать регистр как

def replaceUsingRegEx(dataset: DataFrame, ColumnToBeTransformed: String, searchString: String): DataFrame = {
  dataset.withColumn(ColumnToBeTransformed, when(lower(col(ColumnToBeTransformed)) === searchString.toLowerCase, "").otherwise(col(ColumnToBeTransformed)))
}

Надеюсь, ответ полезен

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