apache-spark
Manipulation de JSON dans Spark
Recherche…
Mapper JSON à une classe personnalisée avec Gson
Avec Gson
, vous pouvez lire un ensemble de données JSON et les mapper à une classe personnalisée MyClass
.
Comme Gson
n'est pas sérialisable, chaque exécuteur a besoin de son propre objet Gson
. De plus, MyClass
doit être sérialisable pour pouvoir passer entre les exécuteurs.
Notez que le ou les fichiers proposés en tant que fichier json ne sont pas un fichier JSON standard. Chaque ligne doit contenir un objet JSON valide, autonome et séparé. En conséquence, un fichier JSON multi-lignes normal échouera le plus souvent.
val sc: org.apache.spark.SparkContext // An existing SparkContext
// A JSON dataset is pointed to by path.
// The path can be either a single text file or a directory storing text files.
val path = "path/to/my_class.json"
val linesRdd: RDD[String] = sc.textFile(path)
// Mapping json to MyClass
val myClassRdd: RDD[MyClass] = linesRdd.map{ l =>
val gson = new com.google.gson.Gson()
gson.fromJson(l, classOf[MyClass])
}
Si la création de l'objet Gson
devient trop coûteuse, la méthode mapPartitions
peut être utilisée pour l'optimiser. Avec lui, il y aura un Gson
par partition au lieu de par ligne:
val myClassRdd: RDD[MyClass] = linesRdd.mapPartitions{p =>
val gson = new com.google.gson.Gson()
p.map(l => gson.fromJson(l, classOf[MyClass]))
}
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow