Parquet
Polars の DataFrame
メモリ上のデータレイアウトが Parquet ファイルのディスク上のレイアウトに多くの点で似ているため、 Parquet
ファイル の読み込みや書き込みは高速です。
CSV とは異なり、Parquet はカラム型のフォーマットです。これは、データがロー単位ではなくカラム単位で格納されることを意味します。これはデータの圧縮と高速なデータアクセスを可能にする、より効率的な方法です。
読み込み
read_parquet
関数を使って、 Parquet
ファイルを DataFrame
に読み込むことができます:
df = pl.read_parquet("docs/data/path.parquet")
ParquetReader
· Available on feature parquet
let mut file = std::fs::File::open("docs/data/path.parquet").unwrap();
let df = ParquetReader::new(&mut file).finish().unwrap();
書き込み
df = pl.DataFrame({"foo": [1, 2, 3], "bar": [None, "bak", "baz"]})
df.write_parquet("docs/data/path.parquet")
ParquetWriter
· Available on feature parquet
let mut df = df!(
"foo" => &[1, 2, 3],
"bar" => &[None, Some("bak"), Some("baz")],
)
.unwrap();
let mut file = std::fs::File::create("docs/data/path.parquet").unwrap();
ParquetWriter::new(&mut file).finish(&mut df).unwrap();
スキャン
Polars では、 Parquet
入力をスキャンすることができます。スキャンすると、ファイルの実際の解析が遅延され、代わりに LazyFrame
と呼ばれる遅延計算ホルダーが返されます。
df = pl.scan_parquet("docs/data/path.parquet")
scan_parquet
· Available on feature parquet
let args = ScanArgsParquet::default();
let lf = LazyFrame::scan_parquet("./file.parquet", args).unwrap();
なぜこれが望ましいのかについては、Polars の最適化について こちら で詳しく説明しています。
クラウドに保存された Parquet
ファイルをスキャンする場合、述語と射影のプッシュダウンを適用することもできます。これにより、ダウンロードする必要のあるデータ量を大幅に削減できます。クラウドストレージからの Parquet ファイルのスキャンについては、クラウドストレージ をご覧ください。