Как изменить столбец массива на отдельные столбцы в Spark Spala? - PullRequest
0 голосов
/ 21 мая 2019

У меня есть столбец с массивами в нем:

"subscriberPhoneNbrs" : [
        {
            "phoneType" : "HOM",
            "phoneNbr" : "9045682704"
        },
        {
            "phoneType" : "WRK",
            "phoneNbr" : "9045749004"
        }
    ]

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

"subWorkPhone" : "9045682704",
"subHomePhone" : "9045749004",

Попытка с использованием функции разнесения, но я не получаю ожидаемого результата.

1 Ответ

2 голосов
/ 21 мая 2019

Вы можете создать список столбцов для выбора:

case class Phone(phoneType: String, phoneNbr: String)

val df = List((0, List(Phone("HOM", "1234"), Phone("WRK", "5678")))).toDF("id", "subscriberPhoneNbrs")
df.show(false)

val dfMap = df.select(map_from_entries($"subscriberPhoneNbrs") as "phoneMap")

val renameMap = Map("WRK" -> "subWorkPhone", "HOM" -> "subHomePhone")
val newCols = renameMap.map(kv => col(s"phoneMap.${kv._1}").alias(kv._2)).toList

dfMap.select(newCols: _*).show

Результатом будет следующее:

+------------+------------+
|subWorkPhone|subHomePhone|
+------------+------------+
|        5678|        1234|
+------------+------------+

map_from_entries doc:

static Column   map_from_entries(Column e)
Returns a map created from the given array of entries.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...