s3fs pandas数据帧上的gzip压缩

7
我正在尝试使用s3fs库和pandas将数据框写入S3作为CSV文件。 尽管有文档说明,但我担心s3fs不支持gzip压缩参数。
def DfTos3Csv (df,file):
    with fs.open(file,'wb') as f:
       df.to_csv(f, compression='gzip', index=False)

这段代码将数据框以纯CSV格式保存为S3中的新对象,而不是gzip格式。另一方面,使用此压缩参数时读取功能正常工作。
def s3CsvToDf(file):
   with fs.open(file) as f:
      df = pd.read_csv(f, compression='gzip')
  return df

建议/替代措施以解决写入问题? 提前感谢您!
2个回答

11

to_csv() 函数的压缩参数在写入流时不起作用。您必须分别执行压缩和上传操作。

import gzip
import boto3
from io import BytesIO, TextIOWrapper

buffer = BytesIO()

with gzip.GzipFile(mode='w', fileobj=buffer) as zipped_file:
    df.to_csv(TextIOWrapper(zipped_file, 'utf8'), index=False)

s3_resource = boto3.resource('s3')
s3_object = s3_resource.Object('bucket_name', 'key')
s3_object.put(Body=buffer.getvalue())

1

pandas(v1.2.4)可以直接将csv写入S3,并且压缩功能正常工作。遗留的pandas可能会在压缩方面存在问题。 例如:

your_pandas_dataframe.to_csv('s3://your_bucket_name/your_s3_key.csv.gz',compression="gzip", index=False)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接