J'ai un énorme fichier Json, dont une petite partie est la suivante:
{
"socialNews": [{
"adminTagIds": "",
"fileIds": "",
"departmentTagIds": "",
........
........
"comments": [{
"commentId": "",
"newsId": "",
"entityId": "",
....
....
}]
}]
.....
}
J'ai appliqué la vue latérale exlode sur socialNews comme suit:
val rdd = sqlContext.jsonFile("file:///home/ashish/test")
rdd.registerTempTable("social")
val result = sqlContext.sql("select * from social LATERAL VIEW explode(socialNews) social AS comment")
Maintenant, je veux reconvertir ce résultat (DataFrame) en json et l'enregistrer dans un fichier, mais je ne parviens pas à trouver un api scala pour effectuer la conversion. en dehors?
val result: DataFrame = sqlContext.read.json(path)
result.write.json("/yourPath")
La méthode write
se trouve dans la classe DataFrameWriter et devrait vous être accessible sur les objets DataFrame
. Assurez-vous simplement que votre rdd est de type DataFrame
et non de type obsolète SchemaRdd
. Vous pouvez explicitement fournir la définition de type val data: DataFrame
ou transtyper vers dataFrame avec toDF()
.
Si vous avez un DataFrame, il y a une API à reconvertir en un RDD [String] contenant les enregistrements json.
val df = Seq((2012, 8, "Batman", 9.8), (2012, 8, "Hero", 8.7), (2012, 7, "Robot", 5.5), (2011, 7, "Git", 2.0)).toDF("year", "month", "title", "rating")
df.toJSON.saveAsTextFile("/tmp/jsonRecords")
df.toJSON.take(2).foreach(println)
Cela devrait être disponible à partir de Spark 1.4. Appelez l'API sur le résultat DataFrame que vous avez créé.
Les API disponibles sont listées ici
sqlContext.read().json(dataFrame.toJSON())
Si vous ne pouvez toujours pas trouver un moyen de convertir Dataframe en JSON, vous pouvez utiliser les fonctions to_json ou toJSON intégrées Spark.
Faites-moi savoir si vous avez un exemple de Dataframe et un format de JSON à convertir.