如何从 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 格式获取文件