Glue DataBrewで出力ファイルがどのように分割されるのか試してみた

2020.11.20

こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。

先日発表された、ビジュアルデータ準備サービス「AWS Glue DataBrew」にとても興味があり、下記エントリを参考に触っています。

その中で気になった「ファイルの出力単位」を少し調べてみましたので、まとめてみます。

ファイルの出力について

DataBrewの「ジョブ」の設定では「ジョブ出力設定」にこんな注意書きがあります。

出力ファイルが大きすぎる場合、出力ファイルはパーティション分割されます。

出力ファイル数やサイズについては、2020/11/18現在は特に設定がなく、どのようになるのか色々と試してみました。

抽出対象データ

サンプルデータの「メトロポリタン美術館コレクション(dataset-met-objects)」から、カラム「credit line」以外を削除して、「重複なし」の処理をしたレシピを通しています。

色々なパターンでの出力を試す

以下のパターンで試してみました。また、ジョブに設定する「ユニットの最大数」は「2」としています。

ファイルタイプ 圧縮
CSV None
CSV Gzip
CSV Deflate
PARQUET Snappy
GLUEPARQUET Snappy
XML None
JSON None
JSON Gzip
JSON Deflate

出力結果まとめ

ジョブを実行した結果、S3に保存された「ファイル数」と、分割されたファイルをダウンロードした際の「1ファイルのバイト数」が以下となりました!

ファイルタイプ 圧縮 ファイル数 1ファイルのバイト数
CSV None 16 10246
CSV Gzip 16 3730
CSV Deflate 16 3718
PARQUET Snappy 16 6605
GLUEPARQUET Snappy 16 6415
XML None 16 18350
JSON None 16 13385
JSON Gzip 16 3879
JSON Deflate 16 3867

ファイル数はいずれも「16」ファイルとなっていました。ファイルサイズは「数KB」となっており、同一ファイル形式では単純に圧縮によるファイルサイズの変化がみられました。

例えば、JSONの非圧縮ファイルは「13385」バイトでGzip圧縮ファイルは「3879」バイトとなっていますが、Gzip圧縮ファイルを解凍したところ、当然ですが非圧縮ファイルと同じjsonファイルですので「13385」バイトとなります。

また、どのファイルにおいてもヘッダ行の有無などはありますが、実データとしては「197レコード分」の出力となっているように見受けられました。

また、「ユニットの最大数」も関係していそうと思われたので、今度は「ユニットの最大数」を「16」にして試したところ、すべて「ファイル数」は「43」ファイル(74レコード分の出力)となりました。およそ2.7倍に増えましたね。

まとめ

色々なパターンでのファイル出力を試してみましたが、今回試したパターンではファイル数は「16~43」、ファイルサイズは「数KB程度」にファイル分割されていました。色々と分割条件はありそうですが、いずれにせよある程度のファイル数に分割して出力されることは間違いなさそうなので、そのあたりは利用の際に考慮が必要かなと思いました。

どなたかのお役に立てば幸いです。それでは!