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