我在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
2条答案
按热度按时间rqqzpn5f1#
由于s3是
object storage
,你需要把你的文件带到计算机上(即读取内存中的文件),编辑它,然后再次推回(重写对象)。所以你花了一些时间来完成任务。
一些辅助指针:
1.如果你在多个线程中处理多个文件,这将对你有所帮助。
1.如果你的数据真的很重,在你的bucket所在的同一个区域启动一个示例,然后从那里处理数据并终止它(这将保存网络成本+在网络上拉和推文件的时间)
mpgws1up2#
你可以使用AWS SDK for Pandas,它是一个扩展Pandas的库,可以在AWS数据库中流畅地工作,
read_csv
也可以从S3文件夹中读取多个csv文件。它可以通过
pip install awswrangler
安装。