sparkでオブジェクトをavro形式にシリアル化します。これらのオブジェクトには、バイト配列(編集:polylines、文字列として表されます)が含まれます。ファイルを調べると、データは正しいです。GenericRecordからByteBufferを抽出するときに余分な値があることがあります
$ java -jar ~/data/avro-tools-1.8.1.jar tojson part-00000.avro | grep 123
{"key":123, "data":{"bytes":"gt_upA`mjrcE{Cw^uBwY"}}
#^this example has been simplified for this question
は、バイト配列の正しい文字列表現です。
次に、これらのファイルを私の普通のScalaアプリケーションでデシリアライズしようとします。ほとんどの値は正しく解析されますが、解析された配列には余分なバイトがあることがあります。
結果はgt_upA`mjrcE{Cw^uBwYB
である。余分な末尾にはB
があることに注意してください。
ファイルを並行して解析していますが、ByteBufferインスタンスがスレッドセーフではなく、バッキングアレイが上書きされていると思います。
これらのファイルはどのように解析する必要がありますか?
編集:質問が立っている間、私はUTF-8文字列として値を直接符号化しています。これは解析時に追加作業を追加しますが、ByteBufferが同時に読み込むことができないという問題を回避します。
良い点を。ただし、これらの値はポリラインであり、定義によって印刷可能です。 – Synesso