输入数据框
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
函数以实现所需的结果。
我只想在搜索字符串与单元格值完全匹配时才替换单元格值。
除了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)))
}
我希望答案是有帮助的
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句