apache-spark
Obsługa JSON w Spark
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