2016-04-14 1 views
0

Je veux convertir un tableau créé comme:Convertir dataframe à RDD [Carte] à Scala

case class Student(name: String, age: Int) 
val dataFrame: DataFrame = sql.createDataFrame(sql.sparkContext.parallelize(List(Student("Torcuato", 27), Student("Rosalinda", 34)))) 

Quand je collectionne les résultats de la trame de données, le tableau résultant est un Array[org.apache.spark.sql.Row] = Array([Torcuato,27], [Rosalinda,34])

Je suis cherchent à modifier la trame de données dans un RDD [carte] par exemple:

Map("name" -> nameOFFirst, "age" -> ageOfFirst) 
Map("name" -> nameOFsecond, "age" -> ageOfsecond) 

J'ai essayé d'utiliser la carte via: x._1 mais cela ne semble pas fonctionner pour Array [spark.sql.row] Ho w puis-je de toute façon effectuer la transformation?

+0

La carte externe ne dispose pas d'une structure de valeur Key-? – Himaprasoon

+0

Le contexte est que je veux utiliser spark-jobserver mais j'ai quelques problèmes concernant la sérialisation des résultats du travail. Apparemment seulement une carte de clé/valeurs de chaîne fonctionne. Le résultat renvoyé sera une agrégation de plusieurs requêtes spark. Donc, la carte externe devrait contenir d'autres clés. https://groups.google.com/forum/#!topic/spark-jobserver/V4finry_RoM –

+2

Ceci est une très mauvaise question, avec un titre trompeur, une mauvaise pratique, une description de mauvaise qualité. Vous aurez besoin de travailler sur ces choses lorsque vous publiez des questions ici – eliasah

Répondre

6

Vous pouvez utiliser la fonction de carte avec motif correspondant pour faire le travail ici

import org.apache.spark.sql.Row 

dataFrame 
    .map { case Row(name, age) => Map("name" -> name, "age" -> age) } 

Cela se traduira par RDD[Map[String, Any]]