如何编程将执行后的Databricks笔记本导出为带输出的HTML文件
Databricks 笔记本单元格内自动导出带运行结果HTML的实现方法
目前没有和Jupyter nbconvert完全对等的本地一键转换命令,最稳定、导出效果和手动操作完全一致的方案是直接调用Databricks官方工作区API完成导出,代码直接放在笔记本最后一个单元格即可运行,不需要手动点菜单操作。
具体实现代码(Python版本)
import os import requests # 自动获取当前运行环境的上下文参数,无需手动硬编码配置 context = dbutils.notebook.entry_point.getDbutils().notebook().getContext() api_host = context.apiUrl().get() api_token = context.apiToken().get() current_notebook_path = context.notebookPath().get() # 调用官方导出接口,include_outputs参数必须设为True才会保留所有单元格运行结果 resp = requests.get( url=f"{api_host}/api/2.0/workspace/export", headers={"Authorization": f"Bearer {api_token}"}, params={ "path": current_notebook_path, "format": "HTML", "direct_download": True, "include_outputs": True } ) resp.raise_for_status() # 自定义HTML保存路径,示例存到DBFS的FileStore目录,可替换为你自己的存储路径 save_local_path = "/dbfs/FileStore/notebook_export/full_run_result.html" with open(save_local_path, "wb") as f: f.write(resp.content) print(f"导出完成,文件已保存至: {save_local_path}")
注意事项
- 代码必须放在笔记本的最后一个单元格,才会等前面所有单元格执行完成、所有输出都生成后再触发导出,拿到的是完整的运行结果
include_outputs=True是必传参数,漏传的话导出的HTML只有代码内容,不会带任何运行输出- 运行笔记本的集群身份、关联的服务账号需要拥有当前笔记本路径的读取权限,否则API会返回权限报错
- 如果集群预装了databricks-cli,也可以直接用cli命令简化代码,本质和调用API逻辑一致:
import os context = dbutils.notebook.entry_point.getDbutils().notebook().getContext() notebook_path = context.notebookPath().get() save_path = "/dbfs/FileStore/notebook_export/full_run_result.html" os.system(f"databricks workspace export {notebook_path} {save_path} --format HTML --include-outputs")
不要尝试直接把笔记本转成ipynb再用nbconvert本地转HTML,Databricks的单元格输出、内置图表、DataFrame预览、SQL单元格渲染都有专属逻辑,本地转换会丢失大量样式和内容,只有官方导出接口能保证和手动点「File >> Export >> HTML」的效果完全一致。
内容的提问来源于stack exchange,提问作者ekdz__
相关产品推荐
相关产品推荐

