コンテンツにスキップ

バッチ処理

数日から数か月分のデータを取得・デコードし、日別のParquetシャードとしてStoreに保存する作業にはPipelineを使います。 1日分をノートブックで調べるだけなら、load()とwrite_parquet()で足ります(読み込んだ配列を扱う)。

対応しているデータ源

Pipelineの実行部(バックエンド)を持つのは、現在KAGUYA PACE(esa1、esa2、ima、iea)だけです。 LRSなどバックエンドの無いエンドポイントでrun()・scan()・stream()を呼ぶとPipelineErrorになります。

処理の段を並べる

Pipelineはエンドポイントのpipeline(time)から作り、段を並べて最後にrun()で実行します。 段を追加しただけでは何も実行しません。

time = spn.period("2008-01-01", "2008-01-04")

pipe = (
    spn.kaguya.esa1.energy_flux.pipeline(time)
    .calibrate(calibration="auto")
    .quicklook("esa1_energy_flux")
    .write("kaguya.esa1.energy_flux", layer="normalized", partition="day")
)
段 内容
download()、decode()、normalize() 元ファイルの取得、デコード、正規化を明示する
calibrate(...) 校正を適用する(PACEのenergy_flux)
select_variables(...) 機器から複数の変数を選ぶ(機器のpipeline()から作ったとき)
quicklook(name, ...) 保存後に、データセットのpreview/へPNGとJSONを書く
write(dataset_id, layer=..., partition="day") 保存先を決める。partition="day"で日別シャード
from_normalized() 元ファイルではなく、Storeに保存済みのデータセットから読む

実行前に確かめる

pipe.plan()                    # 入力、段、出力先
result = pipe.run(dry_run=True)
print(result)                  # 実行せずに、同じ形式の結果を表示する

実行する

result = pipe.run()
result.to_dict()               # 状態、run ID、出力データセット、ログのパス

既存のデータセットを壊さないよう、既定では出力先が既にあると止まります。

引数 動作
mode="create"(既定) 出力先が既にあれば止まる
mode="append" シャードを追加する
mode="replace" 置き換える。PACEの日別シャードとの組み合わせは未対応
resume=True 完了済みの範囲を再利用する。要求範囲がすべて完了していれば何もしない
only_failed=True 失敗したシャードだけを作り直す
on_error="continue" シャードが失敗しても続け、failedとして記録する(既定は"fail"で止まる)
download="never" この実行だけダウンロード方針を変える

各実行にはrun IDが付き、データセットのlogs/<run_id>.jsonに段ごとの開始・終了時刻、行数、シャード数を記録します。 マニフェストの来歴にも、段の一覧・期間・ダウンロード方針・run IDが入ります。

保存済みのデータを読む

lazy = spn.kaguya.esa1.counts.pipeline(time).from_normalized().scan()      # Polars LazyFrame
frame = spn.kaguya.esa1.counts.pipeline(time).from_normalized().collect()

for day_frame in pipe.stream(partition="day"):
    process(day_frame)

streamは"all"と"day"に加え、PACEでは保存済みシャードごとの"shard"を使えます。

全期間の重い計算

全期間にわたるモデル当てはめのような重い処理は、日別シャード・再開・並列実行を前提にしたCLIを別に用意しています。 例としてER全期間バッチを参照してください。 新しいデータ源でPipelineを実行できるようにする方法はデータ源を追加するにあります。