运行 python 在 Azure Databricks 作业中打包 .egg
Running python package .egg in Azure Databricks Job
使用构建工具 (setuptools) 将我的 python 代码打包为 .egg 格式。我想 运行 通过 Azure data-bricks 中的 job 这个包。
我可以通过下面的命令在我的本地机器上执行这个包。
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 创建一个 Python Job。 UI 出于某种原因不支持此功能。
我使用 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 上的 eggs 的一个烦人的事情 - 你必须卸载并重新启动集群,然后它才能获取你部署的任何新版本。
如果您使用工程集群,这不是问题。
使用构建工具 (setuptools) 将我的 python 代码打包为 .egg 格式。我想 运行 通过 Azure data-bricks 中的 job 这个包。
我可以通过下面的命令在我的本地机器上执行这个包。
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 创建一个 Python Job。 UI 出于某种原因不支持此功能。
我使用 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 上的 eggs 的一个烦人的事情 - 你必须卸载并重新启动集群,然后它才能获取你部署的任何新版本。
如果您使用工程集群,这不是问题。