繁体   English   中英

更新 Amazon s3 中 CSV 大文件第一行的最佳方法

[英]Best way to update first row of large CSV files in Amazon s3

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

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

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

如果您愿意使用 AWS Python SDK,boto3,您可以 stream 响应。 但是如果你想避免将整个文件加载到 memory 中,你将需要使用分段上传,这有点难以管理。

这个问题表明您可以将 header 与文件连接起来,而无需解压缩大文件,这可以加快速度。

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

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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM