Databricks列出Azure Blob Storag中的所有Blob

2024-06-01 13:14:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Databricks中安装了一个Blob存储帐户,可以很好地访问它,所以我知道它是有效的。在

但我想做的是列出给定路径下所有文件的名称。。目前我正在使用:

list = dbutils.fs.ls('dbfs:/mnt/myName/Path/To/Files/2019/03/01')
df = spark.createDataFrame(list).select('name')

但我的问题是,它的速度非常慢。。由于该位置有大约160000个blob(存储资源管理器显示为~1016106592字节,即1Gb!)在

这不可能把所有的数据都拉下来,我需要的只是文件名。。在

blob存储是我的瓶颈吗?还是可以(不知何故)让Databricks并行执行命令?在

谢谢。在


Tags: 文件path路径名称帐户fslsblob
1条回答
网友
1楼 · 发布于 2024-06-01 13:14:21

根据我的经验和我对azureblob存储的理解,SDK中的所有操作或azureblob存储上的其他操作都将转换为restapi调用。所以您的dbutils.fs.ls调用实际上是在 Blob容器。在

因此,我确信您的代码的性能瓶颈确实受到了影响,它将Blob列表的XML响应体的数量大小数据传输到list变量中,即使有大约160000个Blob。在

同时,所有blob名称都将被包装在XML响应的多个片段中,并且每个片段都有一个MaxResults限制,获得下一个片段取决于前一个片段的NextMarker值。上面的原因就是为什么要列出blob慢,而且不能并行。在

为了提高加载blob列表的效率,我的建议是预先缓存列表blob的结果,例如生成一个blob来逐行写入blob列表。考虑到实时更新,当发生blob创建事件时,可以尝试使用Azure Function with Blob Trigger将blob名称记录添加到Append blob。在

相关问题 更多 >