在python中更快地从s3中读取多个文件

时间:2019-04-08 10:43:12

标签: python pandas amazon-web-services amazon-s3 aws-cli

我在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

1 个答案:

答案 0 :(得分:0)

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

因此,花了一些时间 才能完成您的任务。

一些帮助指针:

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