我在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并行执行命令?在
谢谢。在
根据我的经验和我对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。在
相关问题 更多 >
编程相关推荐