Как применить функцию искры regexp_replace для нескольких значений ключа? - PullRequest
0 голосов
/ 22 октября 2019

Допустим, существует карта с парой ключ-значение или текстом, подобным:

val pairs = Map(
  "x1" -> "a",
  "1" -> "xf",
  "80" -> "AB"
)

Есть ли способ добавить новый столбец с вызовом regexp_replace в цикле, например:

df.withColumn("newColumn", pairs.mapSomeHow((k,v) => regexp_replace(col("originalColumn"), k, v)))

Например, newColumn будет иметь значение от originalColumn с заменой строк "x1", "1", "80".

Как это сделать?

1 Ответ

1 голос
/ 22 октября 2019

Что-то вроде

df.withColumn(
  "newColumn",
  pairs.foldLeft(df("originalColumn")) {
    case (c, (k, v)) =>
      regexp_replace(c, k, v)
  }
)

Это создаст экземпляр Column из исходного экземпляра df("originalColumn") путем многократного применения regexp_replace к результату предыдущей замены.

...