问题:我用一个非常基本的模块制作了一个轮子,并将其安装在Databricks集群上。创建“Pythonwheel”类型的作业时,作业无法运行,因为找不到包。
设置非常简单。我有一个源代码文件夹:
src
|-app_1
|- __init__.py
|- main.py
其中
main.py
包含:
def func():
print('Hello world!')
然后,我执行以下操作:
将
src
构建为轮子 demo-0.0.0-py3-none-any.whl
。
在 Databricks 集群中安装
demo-0.0.0-py3-none-any.whl
。然后我验证车轮是否已正确构建和安装。我知道这一点是因为我能够运行 from app_1.main import func
,然后调用 func
会成功。这是集群中安装的唯一轮子。
创建一个Pythonwheel类型的作业,然后将包名称设置为
app_1
,入口点设置为main.func
。当我运行作业时,出现无法找到 app_1
的错误。
您必须在设置中为您的轮子命名 - 与您在 databricks 任务调度程序中调用的名称相同:
setup(
name="app_1.main",
...
)
在 Databricks 任务调度程序中:
Package name: app_1.main
和 Entry Point: func
在底层,Databricks 从包中读取元数据,并将整个轮子视为一个包,执行
import app_1.main
。
如果您的包在设置元数据中没有相同的名称,则调度程序将无法工作。
您可以将 init.py 保留为空。在setup.cfg中,声明一个入口点函数
[options.entry_points]
console_scripts =
sample_entrypoint_name = app_1.main:func
在 Databricks 作业 UI 中,只需提及入口点名称 (sample_entrypooint_name)。如果您在“funct”函数中声明了 argeparse,请在参数部分中将它们作为参数提及。
使其发挥作用的方法是使用以下内容更新
__init__.py
:
from my_package import main
然后在您的数据块工作中,您的入口点将是:
main.main
(假设您在 main
中有一个函数
main.py
)
我认为您需要将包设置为
app1.main
并将入口点设置为func
,因为文档说它将调用$packageName.$entryPoint()
,在您的情况下,完整命令是app1.main.func()
在那里你可以看到一个带有Python Wheel任务的完整模板项目。请按照部署说明进行操作。