Databricks:如何清除指定根目录下所有Notebook的所有单元格输出
批量清除Databricks Notebook单元格输出的可行方案
你可以通过以下两种方式,实现从指定根目录(含整个实例、指定目录及子目录)下批量清除所有Notebook的单元格输出:
方法一:用Databricks CLI + Shell脚本批量处理
- 先完成Databricks CLI的配置(执行
databricks configure完成认证) - 编写如下shell脚本(命名为
clear_notebook_outputs.sh),替换TARGET_DIR为你的目标路径:
#!/bin/bash # 替换为你的目标根目录,"/"代表整个实例,也可以指定具体目录如"/Users/xxx/projects" TARGET_DIR="/" # 递归遍历所有Notebook路径 databricks workspace ls -r "$TARGET_DIR" | while read -r path; do # 过滤出Notebook(跳过目录) if databricks workspace info "$path" | grep -q "NOTEBOOK"; then echo "正在清除: $path" # 通过导出再覆盖导入的方式清除输出(DBC格式不含输出) databricks workspace export -f "$path" -t DBC /tmp/temp_notebook.dbc databricks workspace import -f /tmp/temp_notebook.dbc -t DBC -o "$path" rm /tmp/temp_notebook.dbc fi done
执行脚本前赋予执行权限:chmod +x clear_notebook_outputs.sh,然后运行即可。
方法二:用Databricks Workspace API + Python脚本
如果你更偏好Python,可调用Workspace API实现:
import requests # 替换为你的实例地址、个人令牌和目标目录 DATABRICKS_HOST = "https://your-databricks-instance.cloud.databricks.com" DATABRICKS_TOKEN = "your-personal-access-token" TARGET_DIR = "/" headers = {"Authorization": f"Bearer {DATABRICKS_TOKEN}"} def get_all_notebooks(path): """递归获取指定目录下所有Notebook路径""" notebooks = [] list_url = f"{DATABRICKS_HOST}/api/2.0/workspace/list" resp = requests.post(list_url, headers=headers, json={"path": path}) if resp.ok: for item in resp.json().get("objects", []): if item["object_type"] == "NOTEBOOK": notebooks.append(item["path"]) elif item["object_type"] == "DIRECTORY": notebooks.extend(get_all_notebooks(item["path"])) return notebooks def clear_single_notebook(path): """清除单个Notebook的输出""" # 导出不带输出的Notebook(DBC格式) export_url = f"{DATABRICKS_HOST}/api/2.0/workspace/export" export_resp = requests.get(export_url, headers=headers, params={"path": path, "format": "DBC"}) if export_resp.ok: # 覆盖导入原Notebook import_url = f"{DATABRICKS_HOST}/api/2.0/workspace/import" import_resp = requests.post( import_url, headers=headers, json={"path": path, "format": "DBC", "overwrite": True}, data=export_resp.content ) print(f"成功清除: {path}" if import_resp.ok else f"清除失败: {path} - {import_resp.text}") # 执行批量清除 all_notebooks = get_all_notebooks(TARGET_DIR) for nb_path in all_notebooks: clear_single_notebook(nb_path)
注意:需要先安装requests库(pip install requests),且个人令牌需具备Workspace的读、写权限。
重要提醒
- 操作前务必备份关键Notebook,防止意外
- 确保使用的身份凭证有足够权限
- 全实例范围的操作耗时较长,建议在业务低峰期执行
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

