Как я могу сделать так, чтобы состояние подготовки моего пакета рабочей области было «Успешным», а не «Неполным», когда я создаю его с помощью SDK?

#python #azure #azure-synapse #azure-sdk

Вопрос:

Я использую библиотеку ArtifactsClient from azure-synapse-artifacts и пытаюсь загрузить новый пакет рабочей области. При выполнении этого вручную через пользовательский интерфейс он работает, и мое состояние подготовки установлено в «Успешно». Когда я попытаюсь сделать то же самое с помощью SDK, я не получу «Успешно» и, следовательно, не смогу использовать библиотеку в своем пуле Spark.

Вот код, который я использую:

 from time import sleep

from azure.identity import DefaultAzureCredential
from azure.synapse.artifacts import ArtifactsClient


client = ArtifactsClient(credential=DefaultAzureCredential(), endpoint="https://mysynapseworkspace.dev.azuresynapse.net")

ws = client.workspace.get()

library_client = client.library
wheel_name = 'dalib.whl'

poller = library_client.begin_create(wheel_name)
while not poller.done():
    print(poller.status())
    sleep(1)

whl = open('C:\path\to\wheelfile\wheel_tester-0.0.1-py3-none-any.whl', 'rb')
library_client.append(library_name=wheel_name, content=whl)
whl.close()
 

Ответ №1:

Хорошо, я решил эту проблему.

Похоже, что после того, как вы создали библиотеку и вызвали append() метод, который вы также должны использовать begin_flush() , чтобы установить состояние подготовки «успешно». Однако это не упоминается ни в одной документации, которую я нашел. Если у кого-то есть та же проблема, что и у меня, я публикую рабочий код ниже:

 from time import sleep

from azure.core.exceptions import ResourceExistsError
from azure.identity import DefaultAzureCredential
from azure.synapse.artifacts import ArtifactsClient

credential = DefaultAzureCredential()

client = ArtifactsClient(credential=credential, endpoint="https://synws.dev.azuresynapse.net")

ws = client.workspace.get()


library_client = client.library
wheel_name = 'wheel_tester-0.0.1-py3-none-any.whl'
whl = open(f'C:\path\to\wheelfile\{wheel_name}', 'rb')

try:
    print('creating library')
    poller = library_client.begin_create(wheel_name)
    while not poller.done():
        print(poller.status())
        sleep(1)
    print(poller.status())
    print(poller.result())
except ResourceExistsError as ree:
    print('resource already exists.')

print('appending content')
library_client.append(library_name=wheel_name, content=whl)

print('flushing library')
lro_poller = library_client.begin_flush(library_name=wheel_name)
while not lro_poller.done():
    print(lro_poller.status())
    sleep(1)

print(lro_poller.status())
print(lro_poller.result())

whl.close()