8

Avro、Kryo、および Parquet が Spark のコンテキストで正確に何をするのかを理解するのに苦労しています。それらはすべてシリアライゼーションに関連していますが、それらが一緒に使用されているのを見たので、同じことをすることはできません.

Parquet は、その自己を列型ストレージ形式と説明していますが、それはある程度理解できますが、寄木細工のファイルを保存するときに、Arvo または Kryo はそれと関係がありますか? または、スパークジョブ中にのみ関連します。シャッフルまたはディスクへのスピル中にネットワーク経由でオブジェクトを送信するには? Arvo と Kryo の違いと、それらを一緒に使用するとどうなりますか?

4

2 に答える 2

5

Parquet は、データのクエリを実行するときに数列のみを読み取る必要がある場合に非常にうまく機能します。ただし、スキーマに多数の列 (30 以上) があり、クエリ/ジョブでそれらすべてを読み取る必要がある場合は、レコード ベースの形式 (AVRO など) の方が適切に/高速に動作します。

Parquet のもう 1 つの制限は、基本的に一度だけ書き込み可能な形式であることです。そのため、通常はステージング領域でデータを収集し、それを 1 日 1 回寄木細工のファイルに書き込む必要があります (たとえば)。

これは、AVRO を使用したい場合がある場所です。たとえば、AVRO でエンコードされたレコードを Kafka トピックまたはローカル ファイルで収集し、1 日の終わりにそれらすべてを Parquet ファイルに変換するバッチ ジョブを実行できます。これは、AVRO と Parquet 形式を自動的に変換するツールを提供する parquet-avro ライブラリのおかげで、かなり簡単に実装できます。

もちろん、Spark/BigData の外部で AVRO を使用することもできます。これは、Google Protobuf や Apache Thrift に似た、かなり優れたシリアル化形式です。

于 2015-06-18T09:04:11.997 に答える
3

この非常に優れたブログ投稿では、Kryo 以外のすべての詳細が説明されています。

http://grepalex.com/2014/05/13/parquet-file-format-and-object-model/

Kryo は、シャッフル データやキャッシュされたデータなど、メモリ内または一時ファイルとしてのディスク上の永続的なストレージを必要としない高速シリアル化に使用されます。

于 2015-06-14T13:49:00.057 に答える