PyArrow
- Arrow形式でメモリ上でデータを保持しやりとりするためのライブラリ。
S3にParquetファイルを保存
pyarrow.fs.write_datesetを使うとHive形式で分割してファイルしてS3に保存できる。
import pyarrow as pa
import pyarrow.fs as fs
table = pa.Table.from_pydict({
"year": [2024, 2024, 2023, 2023],
"month": [1, 1, 12, 12],
"user_id": [1, 2, 3, 4],
"value": ["A", "B", "C", "D"]
})
s3 = fs.S3FileSystem(region="ap-northeast-1")
ds.write_dataset(
data=table,
base_dir="my-bucket/my-dataset-prefix/",
filesystem=s3,
format="parquet",
# パーティションの指定
partitioning=ds.partitioning(
pa.schema([("year", pa.int64()), ("month", pa.int64())]),
flavor="hive"
),
# 既存データの扱い
existing_data_behavior="overwrite_or_ignore"
)
existing_data_behavior引数
書き込み先にすでにデータがある場合、どう振る舞うかを決める。
- error: デフォルト。データがあるとエラーになる。
- overwrite_or_ignore: 上書き可能なファイルは上書きし、それ以外は無視する(追記に近い挙動)。
- delete_matching: 新しく書き込むパーティション(例: 2024/01)にある既存データを全て消してから書き込む。
冪等性(何度やっても同じ結果になること)を保つバッチ処理ではこれがよく使われる。