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

Respuestas a la pregunta(1)

Su respuesta a la pregunta