【问题标题】:How to read data into a databricks notebook from Azure blob using Azure Active Directory (AAD)如何使用 Azure Active Directory (AAD) 从 Azure blob 将数据读入数据块笔记本
【发布时间】:2019-11-22 17:23:22
【问题描述】:

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

【问题讨论】:

  • 您是在谈论访问 Azure Blob 存储还是 Azure Data Lake 存储?当您说有一些文档时,能否请您指出一篇有关使用 Active Directory 访问 Azure Blob 存储的文章?
  • 仅限 Blob。 docs.microsoft.com/en-us/azure/machine-learning/… 这是一个使用 azure blob 帐户和密码而不是 AAD 登录的示例,密码是指帐户密码。实际上,我在最新版本的 azure-storage-blob 中发现可以使用 BlobServiceClient 登录:pypi.org/project/azure-storage-blob。但我只是使用密钥保管库登录 databricks 笔记本并暂时避免使用 AAD。
  • 在你分享的文档中,使用Azure存储账户名和账户密钥(访问密钥),他们没有在任何地方使用过密码。你能澄清一下问题吗?
  • 账户密钥是密码,如账户的根密钥。我在问如何使用 AAD 而不是帐户名 + 帐户密钥登录。

标签: azure azure-active-directory azure-databricks


【解决方案1】:

不幸的是,这些是 Databricks 中支持的用于访问 Azure Blob 存储的方法:

  • 装载 Azure Blob 存储容器
  • 直接访问 Azure Blob 存储
  • 使用 RDD API 访问 Azure Blob 存储

参考:Databricks - Azure Blob Storage

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

    1. Authorize access to Azure blobs and queues using Azure Active Directory
    2. Authorize access to blobs and queues with Azure Active Directory from a client application
    3. Authorize with Azure Active Directory 关于授权对 Azure 存储的请求

    平均而言,这是我获取 Azure 存储帐户的密钥(帐户密码)以在数据块中使用它的示例代码。

    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 Databricks官方文档Data > Data Sources > Azure Blob Storage读取数据。

    否则,您可以参考我的回答中的步骤 1 和 2 让另一个 SO 线程 transform data in azure data factory using python data bricks 读取数据,如下面的代码。

    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)
    

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 2021-01-14
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      相关资源
      最近更新 更多