С помощью инструмента сборки (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] Нет такого файла или каталога
Ожидается: задание должно быть выполнено успешно.
Единственный способ заставить это работать — использовать 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
["--py-files", "dbfs:/FileStore/jars/8c1231610de06d96-hello_1_0_py3_6-70b16.egg","dbfs:path/hello/pi.py"], поэтому таким образом он может работает?
Вы установили 8c1231610de06d96-hello_1_0_py3_6-70b16.egg? Вы создаете новый кластер?