ビッグデータの世界に長くいるなら、Parquetファイルについて聞いたことがあるでしょう。「なぜCSVファイルを使えないのか?」と考えながら使ったことがあるかもしれません。今日はParquetファイルの謎を解き明かし、なぜ増え続けるデータサイエンティストがCSVファイルよりもParquetファイルを好むのかを説明します。
まずは例から始めましょう。100列、数百万行のデータセットがあると仮定します(このようなデータセットはビッグデータ分野でよく見られます)。しかし、データ分析プロジェクトでは5列だけを抽出すれば十分です。さらに、特定の条件に合わない行もフィルタリングする必要があります。データ保存形式にはCSV、ORC、Parquetの3つの選択肢があります。
CSVはデータ保存に最も一般的に使われるファイル形式の一つです。これは行単位でデータを保存します(下の画像参照)、行が順に格納されることを意味します。このような構造は行の選択に優れており、行を簡単にソートできます。しかし、列を選択する際には、CSVファイルからデータを読み取るのは非効率で時間もかかります。私たちの場合、必要なのは10列だけなのに、テーブルのすべての列をスキャンする必要があります。

2つ目の選択肢はORCです。ORCは列指向のデータ保存形式です。データを列ごとに保存します(下の画像参照)。そのため、ORCファイルから列を選択するのは効率的なプロセスです。しかし、ORCの行選択はすべての行を通じて操作する必要があり、パフォーマンスが妨げられます。

最後に、データを保存するためにParquetを選択することも可能です。Parquetはハイブリッドベースのデータ保存形式です。これは、カラムベースと行ベースのデータ保存形式の両方の特徴を組み合わせているという意味でハイブリッドです(下記画像参照)。このハイブリッドなデータ構造化スタイルの仕組みは以下の通りです:各parquetファイルは複数の行グループに分割され、それぞれに複数の行が含まれています。各行グループは複数のカラムチャンクで構成され、それぞれが元のテーブルの1列に対応しています。

列選択に関しては、各行グループからデータを収集する際に無関係な列を簡単にスキップできます。行選択に関しては、Parquetは行グループの各列チャンクの最大値と最小値を利用して不要な行をスキップします。最大値と最小値が与えられた条件を満たさない列が少なくとも1つ存在する場合(下記画像参照)、行グループはスキャンされません。上記の列・行選択の仕組みのおかげで、両次元で不要なデータをスキャンするのを避けることができ、Parquetの優れたデータ抽出性能を実現しています。

上記のように、Parquetファイルはデータ取得速度の面でCSVファイルより優れています。これは、Parquetファイルがより多くのスペースを占有して時間計算量を減らすことを意味するのでしょうか?答えはノーです。むしろ逆で、Parquetファイルは同じ量のデータを保存するのにCSVファイルよりも少ない容量で済みます。その理由は、Parquetがランレングスエンコーディング、辞書エンコーディング、デルタエンコーディングなど、さまざまなアルゴリズムを用いてデータを圧縮しているからです。
総じて、Parquetファイルはほぼすべての面でCSVファイルより優れています。まず、Parquetはハイブリッドベース(行ベースとカラムベースの両方)のストレージ形式により、データ選択がより効率的です。さらに、Parquetは圧縮アルゴリズムを用いるため、必要な容量も少なくて済みます。したがって、効率的なデータ処理システムを構築したいデータサイエンティストにとって、Parquetは間違いなくあなたの定番ファイルフォーマットであるべきです。
おすすめ文献: Parquetとは何か (詳細な性能比較) Parquetファイルフォーマットの理解 (圧縮) Parquetファイルフォーマットとは何か?ユースケースと利点