Skip to content

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)にある既存データを全て消してから書き込む。 冪等性(何度やっても同じ結果になること)を保つバッチ処理ではこれがよく使われる。

S3のディレクトリを削除