Использовать значение столбца спарк-данных в качестве псевдонима другого столбца - PullRequest
0 голосов
/ 31 мая 2018

Используя spark и scala, я хотел бы установить структуру и использовать одно из значений столбца в качестве псевдонима другого столбца.

У меня есть этот фрейм данных

root
|-- type: string (nullable = true)
|-- metadata
    |-- name: string (nullable = true)
    |-- age: long (nullable = true)
    |-- gender: string (nullable = true)
    |-- country: string (nullable = true)

И я быхотелось бы иметь это

root
|-- metadata
    |-- TYPE_VALUE
        |-- name: string (nullable = true)
        |-- age: long (nullable = true)
        |-- gender: string (nullable = true)
        |-- country: string (nullable = true)

В моем фрейме данных я пытаюсь использовать struct($"metadata".as($"type".toString())).alias("metadata"), но он не работает, вместо имени берется имя поля.

1 Ответ

0 голосов
/ 31 мая 2018

Ну, это не сработает, потому что для этого потребуется динамическая схема, которая не известна заранее.Лучшее, что вы можете сделать, это создать из него отображение:

df.select(
  map('type, 'metadata).as("metadata")
)

с выводом, подобным:

+-------------------------------+
|metadata                       |
+-------------------------------+
|Map(type1 -> [Tom,38,M,NL])    |
|Map(type2 -> [Marijke,37,F,NL])|
+-------------------------------+

res1: Unit = ()
root
 |-- metadata: map (nullable = false)
 |    |-- key: string
 |    |-- value: struct (valueContainsNull = true)
 |    |    |-- name: string (nullable = true)
 |    |    |-- age: long (nullable = false)
 |    |    |-- gender: string (nullable = true)
 |    |    |-- country: string (nullable = true)

Или просто разделить данные на основе type и обработать каждыйвведите в качестве отдельного кадра данных

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