Ну, это не сработает, потому что для этого потребуется динамическая схема, которая не известна заранее.Лучшее, что вы можете сделать, это создать из него отображение:
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
и обработать каждыйвведите в качестве отдельного кадра данных