apache-spark
SparkでのJSONの処理
サーチ…
JSONをGsonでカスタムクラスにマッピングする
Gson
、JSONデータセットを読み込んでカスタムクラスMyClass
マッピングできます。
Gson
は直列化Gson
はないので、各実行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
メソッドを使用して最適化することができます。それに伴い、1行ではなく1パーティションあたり1つの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