繁体   English   中英

数据砖列出Azure Blob存储中的所有Blob

[英]Databricks list all blobs in Azure Blob Storage

我已经在Databricks中安装了一个Blob存储帐户,并且可以正常访问它,所以我知道它可以工作。

我想做的是列出给定路径中所有文件的名称。当前,我正在使用以下方法:

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调用实际上是在Blob容器上调用相关的REST API List Blobs

因此,我确定您的代码的性能瓶颈确实受到了传输Blob存储上Blob列表的XML响应主体的XML大小的数据量的影响,从而将Blob名称提取到list变量中(即使大约有160,000个Blob)确实受到了影响。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM