如何使用Azure Active Directory(AAD)将数据从Azure blob读入databricks笔记本

如何使用Azure Active Directory(AAD)将数据从Azure blob读入databricks笔记本,azure,azure-active-directory,azure-databricks,Azure,Azure Active Directory,Azure Databricks,我正在尝试将一些容器中的数据读取到我的笔记本中,并将它们写入spark或pandas数据框的格式。有一些关于使用帐户密码的文档,但我如何使用Azure Active Directory执行此操作?不幸的是,以下是DataRicks中访问Azure Blob存储的受支持方法: 装载Azure Blob存储容器 直接访问Azure Blob存储 使用RDDAPI访问Azure Blob存储 参考资料: 希望这能有所帮助。关于使用Azure AD访问Azure Blob,有几个Azure官方文档,

我正在尝试将一些容器中的数据读取到我的笔记本中,并将它们写入spark或pandas数据框的格式。有一些关于使用帐户密码的文档,但我如何使用Azure Active Directory执行此操作?

不幸的是,以下是DataRicks中访问Azure Blob存储的受支持方法:

  • 装载Azure Blob存储容器
  • 直接访问Azure Blob存储
  • 使用RDDAPI访问Azure Blob存储
参考资料:


希望这能有所帮助。

关于使用Azure AD访问Azure Blob,有几个Azure官方文档,如下所示

  • 关于授权对Azure存储的请求
  • 同时,这里是我的示例代码,用于获取Azure存储帐户的密钥(帐户密码),以便在databricks中使用它

    from azure.common.credentials import ServicePrincipalCredentials
    from azure.mgmt.storage import StorageManagementClient
    
    # Please refer to the second document above to get these parameter values
    credentials = ServicePrincipalCredentials(
        client_id='<your client id>',
        secret='<your client secret>',
        tenant='<your tenant id>'
    )
    
    subscription_id = '<your subscription id>'
    
    client = StorageManagementClient(credentials, subscription_id)
    
    resource_group_name = '<the resource group name of your storage account>'
    account_name = '<your storage account name>'
    
    # print(dir(client.storage_accounts))
    
    keys_json_text = client.storage_accounts.list_keys(resource_group_name, account_name, raw=True).response.text
    
    import json
    keys_json = json.loads(keys_json_text)
    # print(keys_json)
    # {"keys":[{"keyName":"key1","value":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==","permissions":"FULL"},{"keyName":"key2","value":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==","permissions":"FULL"}]}'
    key1 = keys_json['keys'][0]['value']
    print(key1)
    
    来自azure.common.credentials导入服务PrincipalCredentials
    从azure.mgmt.storage导入StorageManagementClient
    #请参阅上面的第二个文档以获取这些参数值
    凭证=服务原则凭证(
    客户端id=“”,
    秘密=“”,
    租户=“”
    )
    订阅\u id=“”
    客户端=StorageManagementClient(凭据、订阅id)
    资源组名称=“”
    帐户名称=“”
    #打印(目录(客户存储账户))
    keys\u json\u text=client.storage\u accounts.list\u keys(资源\u组\u名称,帐户\u名称,raw=True)。response.text
    导入json
    keys\u json=json.load(keys\u json\u文本)
    #打印(按键和json)
    #{“keys”:[{“keyName”:“key1”,“value”:“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=”,“permissions”:“FULL”},{“keyName”:“key2”,“value”:“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=”,“permissions”:“FULL”}]
    key1=keys_json['keys'][0]['value']
    打印(键1)
    
    然后,您可以使用上面的帐户密码按照Azure Databricks官方文档读取数据

    否则,您可以参考我的答案中的步骤1和步骤2,让另一个SO线程读取数据,如下代码所示

    from azure.storage.blob.baseblobservice import BaseBlobService
    from azure.storage.blob import ContainerPermissions
    from datetime import datetime, timedelta
    
    account_name = '<your account name>'
    account_key = '<your account key>' # the key comes from the code above
    container_name = '<your container name>'
    
    service = BaseBlobService(account_name=account_name, account_key=account_key)
    token = service.generate_container_shared_access_signature(container_name, permission=ContainerPermissions.READ, expiry=datetime.utcnow() + timedelta(hours=1),)
    
    blob_name = '<your blob name of dataset>'
    blob_url_with_token = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}?{token}"
    
    import pandas as pd
    
    pdf = pd.read_json(blob_url_with_token)
    df = spark.createDataFrame(pdf)
    
    从azure.storage.blob.baseblobservice导入baseblobservice
    从azure.storage.blob导入容器权限
    从datetime导入datetime,timedelta
    帐户名称=“”
    account_key=''密钥来自上面的代码
    容器名称=“”
    服务=基本业务服务(帐户名称=帐户名称,帐户密钥=帐户密钥)
    令牌=service.generate\u container\u shared\u access\u签名(container\u name,permission=ContainerPermissions.READ,expiry=datetime.utcnow()+timedelta(小时=1),)
    blob_名称=“”
    blob_url_with_token=f“https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}?{token}”
    作为pd进口熊猫
    pdf=pd.read\u json(带标记的blob\u url\u)
    df=spark.createDataFrame(pdf)
    
    您是在谈论访问Azure Blob存储还是Azure Data Lake存储。?当您说有一些文档时,请您给我指一篇文章,其中谈到使用Active Directory访问Azure Blob存储?仅限Blob。这是一个使用azure blob帐户和密码而不是AAD登录的示例,对于密码,我指的是帐户密码。实际上,我在最新版本的azure storage blob中发现我可以使用BlobServiceClient登录:。但我只是使用key vault登录databricks笔记本,暂时避免AAD。在您共享的文档中,使用Azure存储帐户名和帐户密钥(访问密钥),他们在任何地方都没有使用密码。您能澄清一下吗?帐户密钥是密码,就像帐户的根密钥一样。我特别询问如何使用AAD而不是帐户名+帐户密钥登录。