Обновить столбец в Spark Scala - PullRequest
0 голосов
/ 06 мая 2020
+---+----+-----+
|sno|dept|color|
+---+----+-----+
|  1| G K|  0  |
|  2| L_L|  1  |
|  3|null|  1  |
+---+----+-----+
+---+----+-----+
|sno|dept|color|
+---+----+-----+
|  1| GK|  0  |
|  2| LL|  1  |
|  3|null|  1  |
+---+----+-----+

Я просто хочу обновить отдел, добавив новое значение с удаленным подчеркиванием и пробелом. Может это возможно.

Ответы [ 2 ]

2 голосов
/ 06 мая 2020
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|
+---+----+-----+

Надеюсь, это именно то, что вы ищете.

1 голос
/ 06 мая 2020

Вы можете использовать regexp_replace и trim udf, как показано ниже

import org.apache.spark.sql.functions._

object SampleDF {

  def main(args: Array[String]): Unit = {

    val spark = Constant.getSparkSess
    import spark.implicits._
    val inputDf = Seq((1,"G K","0 "),
      (2,"L-L","1"),
        (3,null,"  1")).toDF("sno","dept","color")

    inputDf
      .withColumn("dept",regexp_replace($"dept"," |-",""))
      .withColumn("color",trim($"color"))
      .show()
  }

}


...