scala> val inputDf = Seq((1,"G K","0 "), (2,"L_L","1"), (3,null," 1")).toDF("sno","dept","color")
inputDf: org.apache.spark.sql.DataFrame = [sno: int, dept: string ... 1 more field]
scala> inputDf.show
+---+----+-----+
|sno|dept|color|
+---+----+-----+
| 1| G K| 0 |
| 2| L_L| 1|
| 3|null| 1|
+---+----+-----+
Q: Я просто хочу обновить отдел, добавив новое значение, из которого удалены подчеркивание и пробел. Может такое возможно?.
да, это ...
inputDf.withColumn("dept",regexp_replace('dept , "_" ,"")) // replace underscore with empty string
.withColumn("dept",regexp_replace('dept , " " ,"")) // replace space with empty string
.withColumn("color", trim('color)).show // if you want to trim which has extra space
.show
Результат:
+---+----+-----+
|sno|dept|color|
+---+----+-----+
| 1| GK| 0|
| 2| LL| 1|
| 3|null| 1|
+---+----+-----+
OR
Разумный подход
1) \s|_
только для пробела и подчеркивания.
2) Использование подчеркивания или удаление любых не буквенно-цифровых символов c использовать регулярное выражение \W|_
val inputDf = Seq((1, "G K", "0 "), (2, "L_L", "1"), (3, null, "1")).toDF("sno", "dept", "color")
inputDf.show
inputDf.withColumn("dept", regexp_replace('dept, """\s|_""", "")).show
Результаты:
+---+----+-----+
|sno|dept|color|
+---+----+-----+
| 1| GK| 0 |
| 2| L_L| 1|
| 3|null| 1|
+---+----+-----+
+---+----+-----+
|sno|dept|color|
+---+----+-----+
| 1| GK| 0 |
| 2| LL| 1|
| 3|null| 1|
+---+----+-----+
Надеюсь, это именно то, что вы ищете.