Как считывать данные в записную книжку Databricks из большого двоичного объекта Azure с помощью Azure Active Directory (AAD)

Я пытаюсь прочитать данные из некоторых контейнеров в свой блокнот и записать их в формат данных spark или pandas. Существует некоторая документация по использованию пароля учетной записи, но как это сделать с помощью Azure Active Directory?


person zzzk    schedule 16.11.2019    source источник
comment
Вы говорите о доступе к хранилищу BLOB-объектов Azure или хранилищу Azure Data Lake? Когда вы говорите, что есть какие-то документы, не могли бы вы указать мне одну статью, в которой говорится о доступе к хранилищу BLOB-объектов Azure с помощью Active Directory?   -  person CHEEKATLAPRADEEP-MSFT    schedule 19.11.2019
comment
Только блоб. docs.microsoft. com/en-us/azure/machine-learning/ Это один из примеров использования учетной записи BLOB-объекта Azure и пароля вместо AAD для входа в систему, а в качестве пароля я имел в виду пароль учетной записи. На самом деле я обнаружил, что в новейшей версии azure-storage-blob я могу использовать BlobServiceClient для входа в систему: pypi.org/project/azure-storage-blob. Но я просто использую хранилище ключей для входа в блокнот с блоками данных и пока избегаю AAD.   -  person zzzk    schedule 19.11.2019
comment
В документе, которым вы поделились, используйте имя учетной записи хранения Azure и ключ учетной записи (ключ доступа), они нигде не использовали пароль. Не могли бы вы уточнить вопрос?   -  person CHEEKATLAPRADEEP-MSFT    schedule 20.11.2019
comment
Ключ учетной записи — это пароль, как корневой ключ для учетной записи. Я конкретно спрашиваю, как войти в систему с помощью AAD вместо имени учетной записи + ключа учетной записи.   -  person zzzk    schedule 20.11.2019


Ответы (2)


К сожалению, это поддерживаемые методы в Databricks для доступа к хранилищу BLOB-объектов Azure.

  • Подключите контейнер хранилища BLOB-объектов Azure.
  • Доступ к хранилищу BLOB-объектов Azure напрямую
  • Доступ к хранилищу BLOB-объектов Azure с помощью RDD API

Ссылка: Databricks — хранилище BLOB-объектов Azure

Надеюсь это поможет.

person CHEEKATLAPRADEEP-MSFT    schedule 21.11.2019

Существует несколько официальных документов Azure о доступе к Azure Blob с помощью Azure AD, как показано ниже.

  1. Авторизация доступа к большим двоичным объектам и очередям Azure с помощью Azure Active Directory< /а>
  2. Авторизация доступа к большим двоичным объектам и очередям с помощью Azure Active Directory из клиентского приложения
  3. Авторизация с помощью 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 Данные > Источники данных > Хранилище BLOB-объектов Azure для чтения данных.

В противном случае вы можете обратиться к шагам 1 и 2 моего ответа для другого потока SO преобразование данных в фабрике данных Azure с помощью блоков данных python для чтения данных, как показано в приведенном ниже коде.

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)
person Peter Pan    schedule 22.11.2019