簡體   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