Azure Databricks:能否将Notebook像库一样部署到集群实现全局复用?
在Azure Databricks中实现全局共享Notebook定义与函数的方案
这个需求完全可行,以下是几种实用的实现方式:
1. 集群初始化脚本(Cluster Init Scripts)
- 先将你的
definitions_fileNotebook导出为Python脚本(在Databricks Notebook界面右上角选择「导出」→「Python」) - 将导出的
.py文件上传到DBFS(比如dbfs:/databricks/scripts/definitions.py)或者你的云存储(如ADLS) - 进入集群配置页面,在「高级选项」→「初始化脚本」中添加该脚本的路径,保存后重启集群
- 集群启动后会自动执行这个脚本,里面的函数、变量和命令会成为集群全局资源,所有连接到该集群的Notebook都能直接调用,无需再执行
%run命令 - 注意:修改脚本后必须重启集群才能生效
2. Databricks工作区库(Workspace Library)
- 把
definitions_file中的代码整理成标准Python模块(比如创建一个my_definitions.py文件,把函数、类等封装进去) - 将模块打包成wheel格式(本地执行
python setup.py bdist_wheel,或者用Databricks的库打包工具) - 在Databricks工作区中创建新库,上传打包好的wheel文件,然后将该库附加到目标集群
- 之后在任意Notebook中只需通过
import my_definitions或者from my_definitions import my_function就能调用对应内容,替代%run - 优势:支持版本管理,更新库后只需重启集群(或刷新库)即可生效,比初始化脚本更灵活
3. 全局临时视图(针对Spark相关对象)
- 如果
definitions_file中包含Spark UDF、DataFrame等对象,可以将它们注册为全局临时视图:- 注册UDF:
spark.udf.register("my_custom_udf", my_udf_function) - 注册DataFrame:
my_df.createGlobalTempView("my_global_df")
- 注册UDF:
- 全局临时视图的生命周期与集群绑定,只要集群运行,所有Notebook都能通过Spark SQL调用:
- 使用UDF:
spark.sql("SELECT my_custom_udf(col) FROM table") - 使用全局视图:
spark.sql("SELECT * FROM global_temp.my_global_df")
- 使用UDF:
- 适合共享Spark生态内的对象,不适合普通Python函数或变量
注意事项
- 以上方案均基于集群级别,只有连接到目标集群的Notebook才能访问共享内容
- 避免在全局共享代码中定义带状态的变量,防止不同Notebook执行时产生干扰
- 若需跨集群共享,建议使用工作区库的方式,可在多个集群间复用
内容的提问来源于stack exchange,提问作者Ricardo Francisco
相关产品推荐
相关产品推荐

