Выполнение пакета Python .egg в задании Azure Databricks - PullRequest
0 голосов
/ 31 мая 2019

С помощью инструмента сборки (setuptools) мой код на Python упакован в формат .egg. Я хотел запустить этот пакет через задание в лазурных блоках данных.

Я могу выполнить пакет на моем локальном компьютере с помощью следующих команд.

spark-submit --py-files ./dist/hello-1.0-py3.6.egg hello/pi.py

1) Скопировал пакет в путь DBFS следующим образом,

work-space -> User -> Create -> Library -> Library Source (DBFS) -> Library Type (Python Egg) -> Uploaded

2) Создано задание с заданием в качестве спарк-отправки в новом режиме кластера

3) Ниже приведены параметры, настроенные для задачи,

["--py-files","dbfs:/FileStore/jars/8c1231610de06d96-hello_1_0_py3_6-70b16.egg","hello/pi.py"]

Факт: / databricks / python / bin / python: невозможно открыть файл '/databricks/driver/hello/hello.py': [Errno 2] Нет такого файла или каталога

Ожидается: задание должно быть успешно выполнено.

1 Ответ

0 голосов
/ 31 мая 2019

Единственный способ заставить это работать - использовать API для создания Python Job .Пользовательский интерфейс по какой-то причине не поддерживает.

Я использую PowerShell для работы с API - это пример, который создает задание с использованием яйца, которое работает для меня:

$Lib = '{"egg":"LOCATION"}'.Replace("LOCATION", "dbfs:$TargetDBFSFolderCode/pipelines.egg")
$ClusterId = "my-cluster-id"
$j = "sample"
$PythonParameters = "pipelines.jobs.cleansed.$j"
$MainScript = "dbfs:" + $TargetDBFSFolderCode + "/main.py"
Add-DatabricksDBFSFile -BearerToken $BearerToken -Region $Region -LocalRootFolder "./bin/tmp" -FilePattern "*.*"  -TargetLocation $TargetDBFSFolderCode -Verbose
Add-DatabricksPythonJob -BearerToken $BearerToken -Region $Region -JobName "$j-$Environment" -ClusterId $ClusterId `
    -PythonPath $MainScript -PythonParameters $PythonParameters -Libraries $Lib -Verbose

Это копирует мои main.py и pipelines.egg в DBFS, а затем создает задание, указывающее на них, передавая параметр.

Одна неприятная вещь о яйцах в Databricks - вы должны удалить и перезапуститькластера, прежде чем он получит все новые версии, которые вы развернете.

Если вы используете инженерный кластер, это не проблема.

...