s3://my-bucket/in.tsv.gz
ロードして処理したい大きなファイルがあり、その処理済みバージョンを s3 出力ファイルに書き戻しますs3://my-bucket/out.tsv.gz
。
- すべてのファイルをメモリにロードせずにs3から直接合理化するにはどうすればよいですか
in.tsv.gz
(メモリに収まりません) - 処理された gzip ストリームを s3 に直接書き込むにはどうすればよいですか?
.tsv
次のコードでは、入力 gzip されたデータフレームを s3 からロードする方法と、それがローカルに配置されている場合にどのように記述するかを示していbucket_dir_local = ./
ます。
import pandas as pd
import s3fs
import os
import gzip
import csv
import io
bucket_dir = 's3://my-bucket/annotations/'
df = pd.read_csv(os.path.join(bucket_dir, 'in.tsv.gz'), sep='\t', compression="gzip")
bucket_dir_local='./'
# not sure how to do it with an s3 path
with gzip.open(os.path.join(bucket_dir_local, 'out.tsv.gz'), "w") as f:
with io.TextIOWrapper(f, encoding='utf-8') as wrapper:
w = csv.DictWriter(wrapper, fieldnames=['test', 'testing'], extrasaction="ignore")
w.writeheader()
for index, row in df.iterrows():
my_dict = {"test": index, "testing": row[6]}
w.writerow(my_dict)
編集:smart_openは行くべき道のように見えます。