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

jrcvhitl  于 2023-01-15  发布在  Python
关注(0)|答案(2)|浏览(311)

我在s3 bucket文件夹中有多个文件。在python中我一个一个地读取文件,并且使用concat来读取单个 Dataframe 。但是,它非常慢。如果我有一百万个文件,那么它将非常慢。有没有其他方法可以增加阅读s3文件的过程(如bash)?

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
rqqzpn5f

rqqzpn5f1#

由于s3是object storage,你需要把你的文件带到计算机上(即读取内存中的文件),编辑它,然后再次推回(重写对象)。
所以你花了一些时间来完成任务。
一些辅助指针:
1.如果你在多个线程中处理多个文件,这将对你有所帮助。
1.如果你的数据真的很重,在你的bucket所在的同一个区域启动一个示例,然后从那里处理数据并终止它(这将保存网络成本+在网络上拉和推文件的时间)

mpgws1up

mpgws1up2#

你可以使用AWS SDK for Pandas,它是一个扩展Pandas的库,可以在AWS数据库中流畅地工作,read_csv也可以从S3文件夹中读取多个csv文件。

import awswrangler as wr
df = wr.s3.read_csv("s3://bucket/folder/")

它可以通过pip install awswrangler安装。

相关问题