You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将完整Python应用部署至Azure Databricks并运行?

关于Azure Databricks中运行大型Python项目的方案解析

先直接回应你最关心的几个核心问题:

  • Azure Data Factory(ADF)运行Python代码的限制:没错,ADF的Python活动默认仅支持单个.py文件,但你可以通过把依赖打包成wheel/egg,再在单个脚本里导入依赖的方式绕开这个限制;
  • Wheel包在CLI/ADF中的访问与参数功能:完全可以通过CLI或ADF访问wheel包,而且不会失去设置参数的功能——你可以通过环境变量、ADF活动参数、Databricks作业参数等多种方式,把配置传递给依赖wheel包的代码。

接下来针对你列出的8种方案逐一分析,帮你理清可行性和实操要点:

方案1:上传wheel包作为库,改写CLI主函数到Notebook并导入

这是非常可行且优先推荐的方案,步骤清晰且改动量小:

  1. 用setup.py或pyproject.toml把你的Python项目打包成wheel包;
  2. 在Databricks工作区中通过「工作区」→「库」上传wheel包,关联到你的目标集群;
  3. 在Notebook中导入wheel包的模块,把原来CLI的主逻辑改写为Notebook中的函数,通过Notebook参数(或Databricks作业参数)传递配置;
  4. 优势:最大化复用现有代码,参数传递灵活,还能利用Notebook的调试和可视化能力。

方案2:将所有代码改写为Notebook

这确实是Databricks原生适配的“最佳”方式,但正如你所说,大型应用的改造成本极高——除非你的代码本身就零散、适合拆分为Notebook单元格,否则不推荐优先考虑。

方案3:上传Python代码到文件系统(FS)模拟项目,在Notebook中调用

这个方案完全可行,适合快速验证现有代码:

  1. 在Databricks的DBFS(或ADLS)中创建和本地项目一致的文件夹结构,上传所有.py文件;
  2. 在Notebook中通过sys.path.append()把项目根目录加入Python路径,然后导入模块执行;
    示例代码:
    import sys
    sys.path.append("/dbfs/path/to/your/project/root")
    from your_module import main_function
    main_function(param1="value1", param2=123)
    
  3. 优势:几乎不用修改原有代码;缺点:代码版本管理不如Git或wheel包方便,集群重启后需要重新配置路径(可以通过集群初始化脚本自动添加)。

方案4:通过GitHub导入代码

由于NDA限制无法迁移到GitHub的话,这个方案直接排除。不过补充个小细节:Databricks其实支持直接连接GitLab仓库(需要配置GitLab个人访问令牌),你可以尝试直接从GitLab导入代码到工作区,不需要迁移到GitHub——这可能是你之前没注意到的点。

方案5:通过连接到Databricks的IDE运行代码

这个方案非常适合开发调试阶段,比如用VS Code搭配Databricks插件,或者PyCharm的Databricks集成:

  • 你可以在本地IDE中编写、调试代码,直接运行到远程Databricks集群;
  • 支持完整的项目结构,不需要改写代码;
  • 缺点:适合开发阶段,生产环境还是建议用Databricks Jobs或ADF做调度运行。

方案6:在ADF管道中启动Python脚本,使用wheel包

可行,但要区分两种ADF活动的差异:

  • 如果你的代码依赖Spark:必须用ADF的「Databricks Notebook活动」或「Databricks作业活动」,直接调用已经导入wheel包的Notebook,参数通过ADF活动的「参数」传递给Notebook;
  • 如果是纯Python代码(无Spark依赖):可以用ADF的「Python活动」,把wheel包上传到ADLS/Blob存储,在脚本中通过pip install --user /path/to/your/wheel/file临时安装后再导入模块。

方案7:使用Azure其他模块从CLI运行Python代码

如果你的代码依赖Spark,这个方案确实意义不大——Spark代码需要在Spark集群中运行,Azure Functions、VM等服务无法直接运行Spark作业。如果是纯Python轻量脚本,这个思路才适用,但对你的场景不匹配。

方案8:通过Notebook中的%sh脚本运行存储的Python代码并传递参数

可行,但不推荐作为生产方案:

  • 把Python脚本上传到DBFS后,在Notebook中用%sh python /dbfs/path/to/script.py --param1 value1运行;
  • 参数可以通过Notebook变量传递,示例:
    param1 = "test_value"
    
    python /dbfs/path/to/script.py --param1 $param1
    
  • 缺点:仅在集群driver节点运行,无法利用Spark分布式计算能力,只适合轻量辅助脚本。

总结推荐优先级

  1. 方案1(Wheel包+Notebook改写主逻辑):平衡代码复用和Databricks适配,适合生产环境;
  2. 方案3(DBFS上传项目结构+Notebook导入):快速验证,改动极小;
  3. 方案5(IDE连接Databricks):开发调试阶段首选;
  4. 方案6(ADF+Databricks活动):适合需要和其他数据流水线集成的生产场景。

内容的提问来源于stack exchange,提问作者la_femme_it

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:22:41