无需下载即可访问 blob 存储中的数据

Access data within the blob storage without downloading

我们的客户正在使用 Azure 的 blob 存储服务来保存大文件,以便我们可以使用 Azure 在线服务来处理它们。

我们希望使用 Azure 直接获得的计算资源来读取和处理这些文件,而无需将它们下载到其他 Azure 服务,例如 Azure Machine Learning Studio。

到目前为止,我们无法访问 blob 存储中的数据,除非将它们下载到 Azure Machine Learning Studio 中进行处理。

此外,我们要读取的文件的 none 是以下类型:

但是,可以在 python 扩展的帮助下阅读它们。

我们如何在不事先下载的情况下访问 blob 存储中的数据?
Azure 是否有可能 mount blob 存储到 Machine Learning Studio?
供您参考:我们不需要使用 Azure 机器学习工作室,而是使用具有计算资源的 Azure 在线服务。

此问题与以下 Whosebug 问题相关:
Azure Blob - Read using Python

这是对我们有用的解决方法之一

import os, uuid, sys
from azure.storage.blob import BlockBlobService, PublicAccess
import pandas as pd

blobfile = "<Your BloB Name>"
container = "<Your Container Name>"
blob_account_name = "<Your storage Account>"
sas_token="<Your SAS Token>"

block_blob_service = BlockBlobService(account_name=blob_account_name, sas_token=sas_token)

print("\n File Content")
blob1 = block_blob_service.get_blob_to_text(container, blobfile)
print(blob1.content);

以下截图供您参考:-

注意:- 确保安装 azure-storage-blob 2.1.0 版本,即 pip install azure-storage-blob==2.1.0

这也可以通过 Azure Databricks 实现。尝试检查 Accessing Azure Blob Storage from Azure Databricks

这是适合我的解决方案:

首先通过 Azure 机器学习工作室将 Blob-Storage-Container 注册为数据存储。
然后在 Azure Notebook 中:

from adlfs import AzureBlobFileSystem #pip install adlfs
from azureml.core import Workspace, Datastore, Dataset
from azureml.data.datapath import DataPath

# Load the workspace from the saved config file
ws = Workspace.from_config()

ds = ws.get_default_datastore()
container_name = ds.container_name
storage_options = {"account_name": "Storage account name", "account_key": ds.account_key}

fs = AzureBlobFileSystem(**storage_options)

然后你可以使用fs.ls(f"blob-storage-container-name")fs.glob(f"blob-storage-container-name/**/*.png")来搜索Blob-Storage-Container。

fs.isdir('blob-storage-container-name/path/to/folder')fs.isfile('blob-storage-container-name/path/to/file') 也按预期工作。

您还可以使用 os 获取有关文件位置及其名称的信息。

import os
my_path = 'blob-storage-container-name/path/to/file'
print(os.path.split(my_path))

请注意,您不能像通常使用 fs.mkdir() 命令那样创建文件夹!
相反,当您创建文件时,您可以在 blob-storage-container 中指定应保存文件的位置。

with fs.open('blob-storage-container-name/path/to/file/Folder1/Folder2/readme.txt', 'w') as f:
    f.write('working')

执行命令后,您会看到Folder1和Folder2已创建。