如何从 Azure blob 数据存储中获取 Python pathlib 路径?

Posted

技术标签:

【中文标题】如何从 Azure blob 数据存储中获取 Python pathlib 路径?【英文标题】:How get a Python pathlib Path from an Azure blob datastore? 【发布时间】:2019-09-16 23:21:17 【问题描述】:

我正在尝试在 AzureML 中对 torch.utils.data.DataLoader 进行一些自定义操作,但无法直接从我的 azureml.core.Datastore 实例化它:

ws = Workspace( # ... etc ... )
ds = Datastore.get(ws, datastore_name='my_ds')
am = ds.as_mount()

# HOW DO I GET base_path, data_file from am?

dataloader = DataLoader(
        ListDataset(base_path, data_file), #... etc...
    )

am.path() 的值是“$AZUREML_DATAREFERENCE_my_ds”,但我无法弄清楚如何从 pathlib.Path 转到 pathlib.Path 的构造函数所期望的 ListDataset。我尝试过的方法包括 Path(am.path())Path(os.environ[am.path()]),但它们似乎不起作用。

很明显,有一些答案,因为:

script_params = 
    '--base_path': ds.as_mount(), 
    '--epochs': 30,  
    '--batch_size' : 16,  
    '--use_cuda': 'true'

torch = PyTorch(source_directory='./',
                        script_params=script_params,
                        compute_target=compute_target,
                        entry_script='train.py',
                        pip_packages=packages,
                        use_gpu=True) 

似乎创建了一个合法的对象。

【问题讨论】:

您的意思是我们必须通过估算器传递 DataReference 对象才能访问数据? 【参考方案1】:

您或许可以尝试使用DataPath class。它公开了诸如 path_on_datastore 之类的属性,这可能是您正在寻找的路径。

从你的 DataReference 对象构造这个类,即变量am;你可以使用create_from_data_reference() 方法。

例子:

ds = Datastore.get(ws, datastore_name='my_ds')
am = ds.as_mount()

dp = DataPath().create_from_data_reference(am)

base_path = dp.path_on_datastore

【讨论】:

【参考方案2】:

上面的代码对我产生了一个错误,删除了 DataPath 实例化后的括号,如下所示使代码运行。

ds = Datastore.get(ws, datastore_name='my_ds')
am = ds.as_mount()

dp = DataPath.create_from_data_reference(am)

base_path = dp.path_on_datastore

感谢sn-p的代码,很有用!

【讨论】:

嗨,Karin,您知道 base_path 获得 None 值的可能原因是什么吗?

以上是关于如何从 Azure blob 数据存储中获取 Python pathlib 路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 中的 Azure.Storage.Blobs 从 Azure 存储 Blob 以 ByteArray 格式获取文件

如何使用条件从 Azure 存储下载 blob?

从 Azure 存储 Blob 访问元数据

如何在 Azure 的子容器中获取 Blob 列表

如何使用javascript从stringstream内容azure blob存储中下载png文件

我们如何使用代理和 NodeJS 从 azure 存储下载 blob?