python - 在 python 中更快地从 s3 读取多个文件
问题描述
我在 s3 存储桶文件夹中有多个文件。在 python 中,我一一读取文件并将 concat 用于单个数据帧。但是,它很慢。如果我有一百万个文件,那么它会非常慢。是否有任何其他可用的方法(如 bash)可以增加读取 s3 文件的过程?
response = client.list_objects_v2(
Bucket='bucket',
Prefix=f'key'
)
dflist = []
for obj in response.get('Contents', []):
dflist.append(get_data(obj,col_name))
pd.concat(dflist)
def get_data(obj, col_name):
data = pd.read_csv(f's3://bucket/{obj.get("Key")}', delimiter='\t', header=None, usecols=col_name.keys(),
names=col_name.values(), error_bad_lines=False)
return data
解决方案
由于 s3 是object storage
您需要将文件带到计算机上(即读取内存中的文件)并对其进行编辑,然后再次推回(重写对象)。
因此,完成您的任务需要一些时间。
一些帮助指针:
- 如果您在多个线程中处理多个文件,这将对您有所帮助。
- 如果您的数据非常繁重,请在您的存储桶所在区域的 aws 上启动一个实例,然后从那里处理数据并终止它。(它将节省网络成本+跨网络拉取和推送文件的时间)
推荐阅读
- symfony - Symfony 4 - 使用 multipart/form-data 发送 POST 请求
- c - 合并排序和递归
- elasticsearch - Elasticsearch 多个建议以及更高级的案例,例如在句子中间匹配前缀
- c# - 在列表视图中获取多个相同条目
- c# - C# 中属性的 Lambda 表达式
- pagespeed - 过去几周提供虚假信息的 PageSpeed 分数
- git - 如何将两个 git 提交者合并到一个 GitLab 帐户中?
- python - PostgreSQL 查询给出了意想不到的结果
- docker - 从 dockerfile 运行 OCI CLI 命令
- c# - 使用 MS Graph 库发送带有大附件的电子邮件