スパークは、rdd.saveAsObjectFile("file")
のファイルにrddを保存することができます。 私はこのファイルをSpark外で読む必要があります。 docによれば、デフォルトのsparkシリアライザを使用すると、このファイルは、標準のJavaシリアル化でシリアル化されたオブジェクトのシーケンスに過ぎません。しかし、私は、ファイルのヘッダーとオブジェクト間の区切りを持っていると思います。私はこのファイルを読んで、jdeserializeを使って(私はクラス定義がないので)各Java/Scalaオブジェクトを逆シリアル化する必要があります。spark rdd.saveAsObjectFileのファイル形式に関するドキュメント
rdd.saveAsObjectFile("file")
(Kryoシリアライザではない標準のシリアライザを使用)で作成されたファイル形式に関するドキュメントはどこにありますか?
更新 VladoDemcakの回答に基づいて作業する例:
import org.apache.hadoop.io._
import org.apache.hadoop.conf._
import org.apache.hadoop.fs._
import org.apache.hadoop.io._
def deserialize(data: Array[Byte]) =
new ObjectInputStream(new ByteArrayInputStream(data)).readObject()
val path = new Path("/tmp/part-00000")
val config = new Configuration()
val reader = new SequenceFile.Reader(FileSystem.get(new Configuration()), path, config)
val key = NullWritable.get
val value = new BytesWritable
while (reader.next(key, value)) {
println("key: {} and value: {}.", key, value.getBytes)
println(deserialize(value.getBytes()))
}
reader.close()
https://gist.github.com/dportabella/dd8886ebb8d5f0eddd1196e1c30e34f6 –