Как заменить строковые значения в одном столбце фактическими значениями столбцов из других столбцов в том же кадре данных? - PullRequest
1 голос
/ 16 мая 2019

У меня есть несколько строковых значений в одном столбце, и я хотел бы заменить подстроки в этом столбце значениями в других столбцах и заменить все знаки плюс пробелами (как показано ниже).

У меня есть эти List[String] отображения, которые передаются динамически, где mapFrom и mapTo должны коррелировать в индексе.

Описание значений: mapFrom: ["Child Name", "Child Age", "Child State"]

Имена столбцов: mapTo: ["name", "age", "state"]

Пример ввода:

name, age, state, description
tiffany, 10, virginia, Child Name + Child Age + Child State
andrew, 11, california, Child State + Child Name + Child Age
tyler, 12, ohio, Child Age + Child State + Child Name

Ожидаемый результат:

name, age, state, description
tiffany, 10, virginia, tiffany 10 virginia
andrew, 11, california, california andrew 11
tyler, 12, ohio, 12 ohio tyler

Как мне добиться этого с помощью Spark Scala?

1 Ответ

1 голос
/ 16 мая 2019

Вы хотите использовать regexp_replace для замены подстрок значением из другого столбца.

Сначала заархивируйте два списка (здесь я добавляю изменение от + в пробелв два lsits, но это можно сделать отдельно):

val mapFrom = List("Child Name", "Child Age", "Child State") :+ " + "
val mapTo = List("name", "age", "state").map(col) :+ lit(" ")
val mapToFrom = mapFrom.zip(mapTo)

Предполагая, что входной фрейм данных df, замените все подстроки их соответствующими значениями следующим образом:

val df2 = mapToFrom.foldLeft(df){case (df, (from, to)) => 
  df.withColumn("description", regexp_replace($"description", lit(from), to))
}

при условии ввода данных результат будет таким, как ожидалось:

+-------+---+----------+------------------------+
|name   |age|state     |description             |
+-------+---+----------+------------------------+
|tiffany|10 |virginia  |tiffany + 10 + virginia |
|andrew |11 |california|california + andrew + 11|
|tyler  |12 |ohio      |12 + ohio + tyler       |
+-------+---+----------+------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...