我有一个S3桶安装到数据库,如下所示:
dbutils.fs.mount(f"s3a://{bucket}", "/mnt/data")
在桶下,有包含文件的文件夹,我只是这样列出:
from pathlib import Path
folder_path = Path(f'/dbfs/mnt/data/{folder_name}')
file_names = [p.name for p in folder_path.glob('*')]
print(f"# of files = {len(file_names)}")
有一个文件夹有200多万个文件,将其列出会占用几GB内存,驱动程序最终会崩溃(单节点群集有32 GB内存)。
我试着使用dbutils.fs.ls
而不是pathlib
列出文件,它需要更长的时间来运行,并且像上面一样耗尽内存。
这让我怀疑抓取s3的databricks实现很糟糕,或者我在这里做错了什么?注意我不能控制bucket下文件夹的结构,所以一个文件夹下可能有一亿个文件,而不把文件拆分成子文件夹。
1条答案
按热度按时间b4qexyjb1#
对于S3中的大量文件,您将希望使用支持分页的API。这被认为是最佳实践,除非可以保证对象列表是受限制的
Boto3 Docs