gpt4 book ai didi

python - Databricks 列出 Azure Blob 存储中的所有 Blob

转载 作者:太空宇宙 更新时间:2023-11-04 04:18:16 25 4
gpt4 key购买 nike

我已将 Blob 存储帐户安装到 Databricks 中,并且可以正常访问它,因此我知道它可以正常工作。

我想做的是列出给定路径中所有文件的名称..目前我正在这样做:

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

但我遇到的问题是它非常慢..由于该位置大约有 160,000 个 blob(存储资源管理器将其显示为 ~1016106592 字节,即 1Gb!)

这肯定不能拉下所有这些数据,我需要/想要的只是文件名..

blob 存储是我的瓶颈吗?或者我可以(以某种方式)让 Databricks 并行执行命令还是其他什么?

谢谢。

最佳答案

根据我的经验以及我对 Azure Blob 存储的理解,SDK 中的所有操作或 Azure Blob 存储上的其他操作都将转换为 REST API 调用。因此,您的 dbutils.fs.ls 调用实际上是在调用相关的 REST API List Blobs在一个 Blob 容器。

因此,我确信您的代码的性能瓶颈确实会受到传输 Blob 存储上 Blob 列表的 XML 响应正文的数量大小的数据以将 Blob 名称提取到 list 变量,即使有大约 160,000 个 blob。

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

对于提高加载blob list的效率,我的建议是提前缓存list blob的结果,比如生成一个blob逐行写入blob list。考虑到实时更新,可以尝试使用 Azure Function with Blob Trigger当发生 Blob 创建事件时,将 Blob 名称记录添加到追加 Blob。

关于python - Databricks 列出 Azure Blob 存储中的所有 Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com