apache-spark
Gestire JSON in Spark
Ricerca…
Mappatura di JSON in una classe personalizzata con Gson
Con Gson
, puoi leggere il set di dati JSON e associarli a una classe personalizzata MyClass
.
Dato che Gson
non è serializzabile, ogni esecutore ha bisogno del proprio oggetto Gson
. Inoltre, MyClass
deve essere serializzabile per passarlo tra gli esecutori.
Si noti che il file (s) che viene offerto come file JSON non è un tipico file JSON. Ogni riga deve contenere un oggetto JSON valido, separato e autonomo. Di conseguenza, un normale file JSON multilinea spesso fallisce.
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])
}
Se la creazione dell'oggetto Gson
diventa troppo costosa, è possibile utilizzare il metodo mapPartitions
per ottimizzarlo. Con esso, ci sarà un Gson
per partizione anziché per riga:
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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow