Как редактировать символы в значении строки - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть столбец код со строками 1231A C, 2163B C, 6142ED. Значения строк должны быть преобразованы следующим отображением: 1-> A, 2-> B, 3 -> C, 4-> D, 5-> E, 6-> F, 7-> G, 8-> H , 9-> I, 0-> J и добавлены в новый столбец transformed_code

val followingMapping = Map(1 -> 'A', 2 -> 'B', 3 -> 'C', 4 -> 'D',
              5 -> 'E', 6 -> 'F', 7 -> 'G', 8 -> 'H', 9 -> 'I', 0 -> 'J')

Вероятно, это должно быть сделано с udf и с чем-то вроде этого:

val transform = udf {row: Row =>
    //transform row value 
}
df.withColumn("transformed_code", transform(df.col("code")))

но я не знаю как? Поэтому я пытаюсь сделать это с помощью следующего кода:

val b = df.select("code").collect()
            val rowValue = b(0).getString(0)
            for(i <- 0 until rowValue.length - 1)
            {
              println(c.charAt(i))
              val currentCharacter = c.charAt(i)
              //transform with mapping

            }

1 Ответ

2 голосов
/ 29 февраля 2020

Вы правы, что это можно сделать через UDF. Посмотрите на решение ниже, как я это придумал.

Решения:

  import spark.implicits._
  val someDf = Seq(("1234AB"), ("2345BC")).toDF("col1")

  val followingMapping = Map(1 -> 'A', 2 -> 'B', 3 -> 'C', 4 -> 'D',
    5 -> 'E', 6 -> 'F', 7 -> 'G', 8 -> 'H', 9 -> 'I', 0 -> 'J')
  // Transforms string into another string based on the map
  def someUdf: (String => String) = {str => str.map(c => followingMapping.getOrElse(c.toInt - 48, c))}
  val myUdf = udf(someUdf)
  someDf.show

  someDf.withColumn("col2", myUdf($"col1")).show

Вышеприведенный код самоочевиден. Ниже показано, как отображаются выходные данные, и они соответствуют функции show, как указано выше:

Вывод:

scala>   someDf.show
+------+
|  col1|
+------+
|1234AB|
|2345BC|
+------+


scala>   someDf.withColumn("col2", myUdf($"col1")).show
+------+------+
|  col1|  col2|
+------+------+
|1234AB|ABCDAB|
|2345BC|BCDEBC|
+------+------+

Дайте мне знать, если это поможет!

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