Как использовать Azure Python SDK для предоставления службы Databricks? - PullRequest
0 голосов
/ 14 июля 2020

[Ранее в этом посте я спрашивал, как предоставлять службы блоков данных без какого-либо рабочего пространства. Теперь я спрашиваю, как предоставить сервису рабочую область, поскольку первый сценарий кажется невозможным.]

Как облачного администратора меня просят написать сценарий с использованием Azure Python SDK, который будет предоставить службу Databricks для одной из наших команд разработчиков больших данных.

Я не могу найти много информации о Databricks в Azure Python SDK, кроме https://azuresdkdocs.blob.core.windows.net/ $ web / python / azure -mgmt-databricks / 0.1.0 / azure .mgmt.databricks.operations. html

и

https://azuresdkdocs.blob.core.windows.net/ $ web / python / azure -mgmt-databricks / 0.1.0 / azure .mgmt.databricks. html

Кажется, они предлагают некоторую помощь в подготовке рабочего пространства, но я не совсем там еще.

Что мне не хватает?

РЕДАКТИРОВАНИЯ:

Спасибо @Laurent Mazuel и @Jim Xu за их помощь.

Вот код, который я сейчас бегу, и получаю сообщение об ошибке:

client = DatabricksClient(credentials, subscription_id)
workspace_obj = client.workspaces.get("example_rg_name", "example_databricks_workspace_name")
WorkspacesOperations.create_or_update(
workspace_obj,
"example_rg_name",
"example_databricks_workspace_name",
custom_headers=None,
raw=False,
polling=True
)

ошибка:

TypeError: create_or_update() missing 1 required positional argument: 'workspace_name'

Я немного озадачен этой ошибкой, поскольку я в качестве третьего параметр, и согласно этой документации , это именно то, что требуется для этого метода.

Я также пробовал следующий код:

client = DatabricksClient(credentials, subscription_id)
workspace_obj = client.workspaces.get("example_rg_name", "example_databricks_workspace_name")
client.workspaces.create_or_update(
workspace_obj,
"example_rg_name",
"example_databricks_workspace_name"
)

Результат:

 Traceback (most recent call last):
   File "./build_azure_visibility_core.py", line 112, in <module>
     ca_databricks.create_or_update_databricks(SUB_PREFIX)
   File "/home/gitlab-runner/builds/XrbbggWj/0/SA-Cloud/azure-visibility-core/expd_az_databricks.py", line 34, in create_or_update_databricks
     self.databricks_workspace_name
   File "/home/gitlab-runner/builds/XrbbggWj/0/SA-Cloud/azure-visibility-core/azure-visibility-core/lib64/python3.6/site-packages/azure/mgmt/databricks/operations/workspaces_operations.py", line 264, in create_or_update
     **operation_config
   File "/home/gitlab-runner/builds/XrbbggWj/0/SA-Cloud/azure-visibility-core/azure-visibility-core/lib64/python3.6/site-packages/azure/mgmt/databricks/operations/workspaces_operations.py", line 210, in _create_or_update_initial
     body_content = self._serialize.body(parameters, 'Workspace')
   File "/home/gitlab-runner/builds/XrbbggWj/0/SA-Cloud/azure-visibility-core/azure-visibility-core/lib64/python3.6/site-packages/msrest/serialization.py", line 589, in body
     raise ValidationError("required", "body", True)
 msrest.exceptions.ValidationError: Parameter 'body' can not be None.
 ERROR: Job failed: exit status 1

Итак, строка 589 в serialization.py содержит ошибку. Я не вижу, где ошибка в моем коде вызывает это. Спасибо всем, кто щедро помогал!

Ответы [ 2 ]

1 голос
/ 15 июля 2020

вам нужно создать клиент блока данных, и к нему будут прикреплены рабочие области:

client = DatabricksClient(credentials, subscription_id)
workspace = client.workspaces.get(resource_group_name, workspace_name)

Я не думаю, что создание службы без рабочей области возможно, пытаюсь создать службу блоков данных на портал, вы увидите, что имя рабочей области также требуется, поэтому, используя SDK, я бы посмотрел на do c для client.workspaces.create_or_update

(я работаю в MS в команде SDK)

0 голосов
/ 23 июля 2020

с помощью @Laurent Mazuel и инженеров службы поддержки Microsoft у меня есть решение:

managed_resource_group_ID = ("/subscriptions/"+sub_id+"/resourceGroups/"+managed_rg_name)
client = DatabricksClient(credentials, subscription_id)
workspace_obj = client.workspaces.get(rg_name, databricks_workspace_name)
client.workspaces.create_or_update(
    {
        "managedResourceGroupId": managed_resource_group_ID,
        "sku": {"name":"premium"},
        "location":location
    },
    rg_name,
    databricks_workspace_name
).wait()
...