apache-spark
Umgang mit JSON in Spark
Suche…
Zuordnung von JSON zu einer benutzerdefinierten Klasse mit Gson
Mit Gson
können Sie das JSON-Dataset lesen und einer benutzerdefinierten Klasse MyClass
.
Da Gson
nicht serialisierbar ist, benötigt jeder Executor ein eigenes Gson
Objekt. MyClass
muss auch serialisierbar sein, damit es zwischen Ausführenden übertragen werden kann.
Beachten Sie, dass die Datei (en), die als Json-Datei angeboten werden, keine typische JSON-Datei sind. Jede Zeile muss ein separates, in sich geschlossenes gültiges JSON-Objekt enthalten. Infolgedessen schlägt eine reguläre mehrzeilige JSON-Datei meistens fehl.
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])
}
Wenn die Erstellung eines Gson
Objekts zu kostspielig wird, kann die mapPartitions
Methode zur Optimierung verwendet werden. Damit wird pro Partition ein Gson
statt pro Zeile vorhanden sein:
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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow