L'explosion imbriquée Struct Spark dataframe

Je travaille par le biais de la Databricks exemple. Le schéma de la dataframe ressemble:

> parquetDF.printSchema
root
|-- department: struct (nullable = true)
|    |-- id: string (nullable = true)
|    |-- name: string (nullable = true)
|-- employees: array (nullable = true)
|    |-- element: struct (containsNull = true)
|    |    |-- firstName: string (nullable = true)
|    |    |-- lastName: string (nullable = true)
|    |    |-- email: string (nullable = true)
|    |    |-- salary: integer (nullable = true)

Dans l'exemple, ils montrent comment faire exploser les employés de la colonne en 4 colonnes supplémentaires:

val explodeDF = parquetDF.explode($"employees") { 
case Row(employee: Seq[Row]) => employee.map{ employee =>
  val firstName = employee(0).asInstanceOf[String]
  val lastName = employee(1).asInstanceOf[String]
  val email = employee(2).asInstanceOf[String]
  val salary = employee(3).asInstanceOf[Int]
  Employee(firstName, lastName, email, salary)
 }
}.cache()
display(explodeDF)

Comment pourrais-je faire quelque chose de similaire avec le ministère de la colonne (c'est à dire ajouter deux colonnes supplémentaires pour le dataframe appelé "id" et "nom")? Les méthodes ne sont pas exactement les mêmes, et je ne peux que comprendre comment créer un nouveau bloc de données à l'aide de:

val explodeDF = parquetDF.select("department.id","department.name")
display(explodeDF)

Si j'essaie:

val explodeDF = parquetDF.explode($"department") { 
  case Row(dept: Seq[String]) => dept.map{dept => 
  val id = dept(0) 
  val name = dept(1)
  } 
}.cache()
display(explodeDF)

- Je obtenir de l'avertissement et d'erreur:

<console>:38: warning: non-variable type argument String in type pattern Seq[String] is unchecked since it is eliminated by erasure
            case Row(dept: Seq[String]) => dept.map{dept => 
                           ^
<console>:37: error: inferred type arguments [Unit] do not conform to    method explode's type parameter bounds [A <: Product]
  val explodeDF = parquetDF.explode($"department") { 
                                   ^

OriginalL'auteur Feynman27 | 2016-09-01