首页 > 解决方案 > 在 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

标签: pythonpandasamazon-web-servicesamazon-s3aws-cli

解决方案


由于 s3 是object storage您需要将文件带到计算机上(即读取内存中的文件)并对其进行编辑,然后再次推回(重写对象)。

因此,完成您的任务需要一些时间。

一些帮助指针:

  1. 如果您在多个线程中处理多个文件,这将对您有所帮助。
  2. 如果您的数据非常繁重,请在您的存储桶所在区域的 aws 上启动一个实例,然后从那里处理数据并终止它。(它将节省网络成本+跨网络拉取和推送文件的时间)

推荐阅读