问题描述
我的 Azure Web 应用程序需要从 blob 存储目录下载 1000 多个非常小的文件并对其进行处理。
如果我列出来,然后一个一个下载,需要很长时间……有什么快速的方法吗?喜欢一起下载吗?
PS:我使用以下代码:
from azure.storage.blob import ContainerClient,BlobClient
blob_list = #... list all files in a blob storage directory
for blob in blob_list:
blob_client = BlobClient.from_connection_string(connection_string,container_name,blob)
downloader = blob_client.download_blob(0)
blob = pickle.loads(downloader.readall())
解决方法
我使用 Azure databricks 解决了类似的问题。您可以轻松地在数据块(即 ADLS Gen2)中安装 Azure 存储帐户,然后处理本地文件等存储文件。即使不下载文件,您也可以复制文件或直接进行处理/转换。
您可以在此 LINK
中找到数据块安装步骤
在数据块中,您还可以使用 dbutils 函数在挂载 ADLS 后让操作系统访问您的文件。
我希望这种方法能有所帮助。
我还要指出,由于您使用的是 azure-batch
,因此您可以在您的 linux 虚拟机中使用 blob 挂载配置。因此,我们的想法是将驱动器挂载到您的 VM,从而消除所有下载时间,并将您的驱动器连接到 vm。
-
文档:https://docs.microsoft.com/en-us/azure/batch/virtual-file-mount
-
Blobfilesystem 配置:https://docs.microsoft.com/en-us/python/api/azure-batch/azure.batch.models.azureblobfilesystemconfiguration?view=azure-python
-
关键点(仅供参考):在幕后
blobfilesystem
使用blobfuse
驱动程序进行挂载。 https://docs.microsoft.com/en-us/azure/batch/virtual-file-mount#azure-blob-file-system
谢谢并希望这会有所帮助。