Поиск…


Отображение JSON в пользовательский класс с помощью Gson

С помощью Gson вы можете прочитать набор данных JSON и сопоставить их с пользовательским классом MyClass .

Поскольку Gson не является сериализуемым, каждому исполнителю нужен свой собственный объект Gson . Кроме того, MyClass должен быть сериализуемым, чтобы передавать его между исполнителями.

Обратите внимание, что файл (ы), который предлагается в виде json-файла, не является типичным файлом JSON. Каждая строка должна содержать отдельный автономный действительный объект JSON. Как следствие, обычный многострочный файл JSON чаще всего терпит неудачу.

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

Если создание объекта Gson становится слишком дорогостоящим, метод mapPartitions может быть использован для его оптимизации. При этом Gson каждого раздела вместо одной строки будет один Gson :

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow