Python 如何将AML连接到ADLS第2代?

Python 如何将AML连接到ADLS第2代?,python,azure-machine-learning-service,azure-data-lake-gen2,Python,Azure Machine Learning Service,Azure Data Lake Gen2,我想在我的Azure机器学习工作区中注册来自ADLS Gen2的数据集(azureml core==1.12.0)。鉴于Python SDK中不需要的服务主体信息。register\u azure\u data\u lake\u gen2(),我成功地使用以下代码将ADLS gen2注册为数据存储: 从azureml.core导入数据存储 adlsgen2_datastore_name=os.environ['adlsgen2_datastore_name'] account_name=os.E

我想在我的Azure机器学习工作区中注册来自ADLS Gen2的数据集(
azureml core==1.12.0
)。鉴于Python SDK中不需要
的服务主体信息。register\u azure\u data\u lake\u gen2()
,我成功地使用以下代码将ADLS gen2注册为数据存储:

从azureml.core导入数据存储
adlsgen2_datastore_name=os.environ['adlsgen2_datastore_name']
account_name=os.Enviro['account_name']#ADLS第2代帐户名
file_system=os.environ['filesystem']
adlsgen2\u datastore=datastore.register\u azure\u data\u lake\u gen2(
workspace=ws,
datastore_name=adlsgen2_datastore_name,
账户名称=账户名称,
文件系统=文件系统
)
但是,当我尝试注册数据集时,使用

来自azureml.core导入数据集
adls\u ds=Datastore.get(ws,Datastore\u name=adlsgen2\u Datastore\u name)
data=Dataset.Tabular.from_分隔的_文件((adls_ds,'folder/data.csv'))
我犯了一个错误

无法从指定路径加载任何数据。确保路径可访问且包含数据。
ScriptExecutionException
是由
StreamAccessException
引起的。 StreamAccessException是由AuthenticationException引起的。 存储上“[Redact]”的“[code]”的“AdlsGen2-ReadHeaders”失败,状态代码为“禁止”(此请求无权使用此权限执行此操作),客户端请求ID,请求ID。错误消息:[已编辑] |会话号=

我是否需要支持服务主体使其能够工作?使用ML Studio UI,似乎甚至需要服务主体来注册数据存储

我注意到的另一个问题是,AMLS正在尝试访问此处的数据集:
https://adls_gen2_account_name.**dfs**.core.windows.net/container/folder/data.csv
而ADLS Gen2中的实际URI是:
https://adls_gen2_account_name.**blob**.core.windows.net/container/folder/data.csv

根据这一点,您需要启用服务主体

1.您需要注册您的应用程序,并向服务主体授予存储Blob数据读取器访问权限

2.尝试以下代码:

adlsgen2_datastore = Datastore.register_azure_data_lake_gen2(workspace=ws,
                                                             datastore_name=adlsgen2_datastore_name,
                                                             account_name=account_name,
                                                             filesystem=file_system,
                                                             tenant_id=tenant_id,
                                                             client_id=client_id,
                                                             client_secret=client_secret
                                                             )

adls_ds = Datastore.get(ws, datastore_name=adlsgen2_datastore_name)
dataset = Dataset.Tabular.from_delimited_files((adls_ds,'sample.csv'))
print(dataset.to_pandas_dataframe())
结果: