amazon-web-services - 在 Amazon s3 中更新第一行大型 CSV 文件的最佳方法
问题描述
我有 15 个大于 5GB 的大文件。这 15 个大型 CSV 文件的标题丢失了,我们需要将其作为每个文件的第一行注入。最聪明的方法是什么?
目前,我有一个在文件中运行 sed 的 S3 cp 命令,但它速度慢且耗时。有更好的方法吗?数据被压缩
解决方案
我想如果您不将文件保存到磁盘,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))
推荐阅读
- user-interface - 如何在主窗口中显示声明为 vbox/hbox 的数组?
- mysql - MySQL SELECT GROUP_CONCAT 并在另一个选择的 WHERE 子句中使用它
- android - 在 Android Studio 上设置多个闹钟
- sql - 如何对 SQL 中的计算列执行求和?
- vue.js - Apollo Nuxt 查询未将结果存储在所需对象中
- hash - 将 ruby 哈希转换为等号格式
- java - 如何限制视图中绘图功能的范围?安卓系统
- javascript - 在使用 JavaScript 的 API 调用中使用多个 JSON 对象
- excel - 将工作表名称复制并粘贴到特定单元格中
- python-3.x - Errno 24:Python 中打开的文件过多