Cómo obtener claves y valores de la columna MapType en SparkSQL DataFrame
Tengo datos en un archivo de parquet que tiene 2 campos:object_id: String
yalpha: Map<>
.
Se lee en un marco de datos en sparkSQL y el esquema se ve así:
scala> alphaDF.printSchema()
root
|-- object_id: string (nullable = true)
|-- ALPHA: map (nullable = true)
| |-- key: string
| |-- value: struct (valueContainsNull = true)
Estoy usando Spark 2.0 y estoy tratando de crear un nuevo marco de datos en el que las columnas deben estarobject_id
más teclas de laALPHA
mapa como enobject_id, key1, key2, key2, ...
Primero estaba tratando de ver si al menos podía acceder al mapa de esta manera:
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()
pero desafortunadamente parece que no puedo entender cómo acceder a las teclas del mapa.
¿Puede alguien mostrarme una forma de obtener elobject_id
además de claves de mapa como nombres de columna y valores de mapa como valores respectivos en un nuevo marco de datos