[英]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.