У меня есть данные в файле паркета, который имеет 2 поля: object_id: String
и alpha: Map<>
.
Он считывается во фрейм данных в sparkSQL, и схема выглядит так:
scala> alphaDF.printSchema()
root
|-- object_id: string (nullable = true)
|-- ALPHA: map (nullable = true)
| |-- key: string
| |-- value: struct (valueContainsNull = true)
Я использую Spark 2.0 и пытаюсь создать новый фрейм данных, в котором столбцы должны быть object_id
плюс ключи карты ALPHA
, как в object_id, key1, key2, key2, ...
Сначала я пытался проверить, могу ли я хотя бы получить доступ к карте следующим образом:
scala> alphaDF.map(a => a(0)).collect()
<console>:32: error: Unable to find encoder for type stored in a Dataset.
Primitive types (Int, String, etc) and Product types (case classes) are
supported by importing spark.implicits._ Support for serializing other
types will be added in future releases.
alphaDF.map(a => a(0)).collect()
но, к сожалению, я не могу понять, как получить доступ к ключам карты.
Может ли кто-нибудь показать мне способ получить object_id
плюс ключи карты в качестве имен столбцов и значения карты в качестве соответствующих значений в новом фрейме данных?