Szukaj…


Mapowanie JSON do klasy niestandardowej za pomocą Gson

Dzięki Gson możesz odczytać zestaw danych JSON i zamapować je na niestandardową klasę MyClass .

Ponieważ Gson nie podlega szeregowaniu, każdy Gson wykonujący potrzebuje własnego obiektu Gson . Ponadto MyClass musi być serializowalny, aby przekazywać go między wykonawcami.

Zauważ, że plik (i) oferowane jako plik json nie jest typowym plikiem JSON. Każda linia musi zawierać osobny, niezależny, prawidłowy obiekt JSON. W rezultacie zwykły wieloliniowy plik JSON najczęściej zawiedzie.

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])
}

Jeśli utworzenie obiektu Gson się zbyt kosztowne, można go użyć do optymalizacji metody mapPartitions . Dzięki niemu będzie jeden Gson na partycję zamiast na linię:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow