首页 > 解决方案 > 在 Amazon s3 中更新第一行大型 CSV 文件的最佳方法

问题描述

我有 15 个大于 5GB 的大文件。这 15 个大型 CSV 文件的标题丢失了,我们需要将其作为每个文件的第一行注入。最聪明的方法是什么?

目前,我有一个在文件中运行 sed 的 S3 cp 命令,但它速度慢且耗时。有更好的方法吗?数据被压缩

标签: amazon-web-servicesamazon-s3

解决方案


我想如果您不将文件保存到磁盘,aws s3 cp那么您可以加快速度。(尽管您可能正在使用 shell 进程替换来避免保存到磁盘。)

如果您愿意使用 AWS Python 开发工具包 boto3,则可以流式传输响应。但是,如果您想避免将整个文件加载到内存中,则需要使用分段上传,这有点难以管理。

这个问题表明您可以在不解压缩大文件的情况下将标题与文件连接起来,这可以加快速度。

把这两个想法放在一起,这里是一个例子。

import boto3
import gzip

s3 = boto3.client("3")
bucket = "mybucket"
key = "mykey.csv.gz"
new_key = "mykey2.csv.gz"

my_header = "Name,Date,Score".encode("utf-8")
header_compressed = gzip.compress(my_header)

r = s3.get_object(Bucket=bucket, Key=key)
output = [header_compressed]
for chunk in r["Body"].iter_chunks():
    output.append(chunk)

s3.put_object(Bucket=bucket, Key=new_key, Body=b"".join(output))

推荐阅读