Я должен написать очистить при совпадении компонент. Для этого я пытался использовать разные встроенные функции свечи
У меня есть оператор переключения для разных случаев
val operator = operatorAndTokenTuple._1
val token = operatorAndTokenTuple._2
operator match {
case "equals" => clearValueEquals(ds,token,columnsToBeUpdated)
case "contains" =>clearValueContains(ds,token,columnsToBeUpdated)
case "starts_with" => clearValueStartsWith(ds,token,columnsToBeUpdated)
case "ends_with" => clearValueEndsWith(ds,token,columnsToBeUpdated)
case "regex" => clearValueUsingRegex(ds,token,columnsToBeUpdated)
case _ => throw new OperatorNotFoundException(s"${operatorAndTokenTuple._1} not applicable")
}
Я реализовал каждый случай, кроме regex
. Я написал функцию, как показано ниже
def clearValueUsingRegex(dataFrame: DataFrame,token :String,columnsToBeUpdated : List[String])= {
columnsToBeUpdated.foldLeft(dataFrame) {
(dataset ,columnName) =>
dataset.withColumn(columnName,regexp_replace(col(columnName),token, ""))
}
}
Проблема с вышеуказанной функцией заключается в том, что она заменяет слова, которые соответствуют regex
, на это значение. Но я ожидаю результата, который заменит значение ячейки пустой строкой только тогда, когда регулярное выражение полностью совпадет со значением ячейки.
Например, если token
равно .com
, а значение моей ячейки равно google.com
, оно не должно заменять .com
из ячейки, поскольку значение ячейки равно google.com
.
Его следует заменять только при полном совпадении значений в ячейках столбца.