apache-spark
Обработка JSON в Spark
Поиск…
Отображение 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]))
}