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 以外に、gzip、brotli、lz4、zstd が使えます。
より高速な 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" がデフォルトですが、snappy、gzip、brotli、lz4、uncompressed が使えます。
pandasと違って、compression_level=整数 で圧縮レベルを指定できます。gzipは0〜9(デフォルト6)、brotliは0〜11(デフォルト1)、zstdは1〜22(デフォルト3)です。