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