【发布时间】:2021-03-12 00:59:04
【问题描述】:
我有一个大文件 s3://my-bucket/in.tsv.gz 我想加载和处理,将其处理后的版本写回 s3 输出文件 s3://my-bucket/out.tsv.gz。
- 如何直接从 s3 简化
in.tsv.gz而不将所有文件加载到内存(它无法容纳内存) - 如何将处理后的 gzip 流直接写入 s3?
在下面的代码中,我展示了我是如何考虑从 s3 加载输入 gzipped 数据帧的,以及如果 .tsv 位于本地 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 看起来不错。
【问题讨论】:
标签: python csv amazon-s3 python-s3fs