Запуск пакета Python .egg в задании Azure Databricks

С помощью инструмента сборки (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) Создал задание с задачей как spark-submit в новом режиме кластера.

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] Нет такого файла или каталога

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

Вы установили 8c1231610de06d96-hello_1_0_py3_6-70b16.egg? Вы создаете новый кластер?

Eric Bellet 30.08.2019 10:10
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
1 954
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Я использую 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 — вы должны удалить и перезапустить кластер, прежде чем он подхватит любые новые версии, которые вы развертываете.

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

Умеет следовать вашим предложениям. Скопировал main.py и *.egg в DBFS с помощью команды Add-DatabricksDBFSFile. Когда я запускаю задание с помощью команды Add-DatabricksPythonJob, оно читает файл и печатает содержимое main.py вместо выполнения файла и возврата результатов. Example: \nfrom __future__ import print_function\n\nimport sys\nfrom random import random\nfrom operator import add\n\nfrom pyspark.sql import SparkSession\n\n\ndef helloworld():\n\t return "Hello World"\n

Murali 03.06.2019 12:37

["--py-files", "dbfs:/FileStore/jars/8c1231610de06d96-hello_1‌​_0_py3_6-70b16.egg",‌​"dbfs:path/hello/pi.‌​py"], поэтому таким образом он может работает?

Eric Bellet 30.08.2019 10:37

Другие вопросы по теме