Apache Parquet(データ形式)

Apache(アパッチ)の Parquet(パルケ)は効率の良いデータ格納形式です。フランス語 parquet [paʀ-kε] は床の寄せ木張りのことです。Parquetのマークがそれを表しています。英語(フランス語)でしゃべるなら「パルケ」より「ぱぁケー」と発音すればわかりやすいと思います。

Parquet形式のファイルを読むには、pandasでは次のようにします。

import pandas as pd

df = pd.read_parquet("filename.parquet")

デフォルトではpyarrowというエンジンを使いますので、pandas以外にpyarrowもインストールが必要です(pip install pyarrow)。さらにfastparquetも使うことができます(pip install fastparquet)。こちらを使うには次のようにします。

df = pd.read_parquet("filename.parquet", engine="fastparquet")

Parquetは内部では列ごとにデータが並んでいますので、次のように、特定の列だけ読み出すことが効率よくできます。

df = pd.read_parquet("filename.parquet", columns=["foo", "bar"])

書き出しは次のようにします。

df.to_parquet("filename.parquet")

オプションとして、先ほどの engine 以外に、圧縮方式 compression が指定できます。デフォルトの圧縮 snappy 以外に、gzipbrotlilz4zstd が使えます。

より高速な Polars で読むには次のようにします。

import polars as pl

df = pl.read_parquet("filename.parquet")
print(df)

デフォルトではRust製のエンジンを使いますが、オプション use_pyarrow=True でC++のPyArrowを使います。colums=[...] で、指定した列だけを読みます。

書き出しは次のようにします。

df.write_parquet("filename.parquet")

こちらもオプション use_pyarrow=True でC++のPyArrowを使います。圧縮は compression="zstd" がデフォルトですが、snappygzipbrotlilz4uncompressed が使えます。

pandasと違って、compression_level=整数 で圧縮レベルを指定できます。gzipは0〜9(デフォルト6)、brotliは0〜11(デフォルト1)、zstdは1〜22(デフォルト3)です。