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

Databricks中%run场景下如何一致读取notebook关联的data.yml?

解决Databricks Notebook路径引用不一致问题

方法1:通过Spark配置获取当前Notebook的真实路径

在notebook1中,使用Spark内置配置项获取自身绝对路径,不受调用上下文影响:

import os
from pyspark.sql import SparkSession

spark = SparkSession.getActiveSession()
# 获取notebook1的绝对路径
notebook_path = spark.conf.get("spark.databricks.notebook.path")
# 提取notebook所在目录
notebook_dir = os.path.dirname(notebook_path)
# 拼接同目录下的data.yml路径
data_path = os.path.join(notebook_dir, "data.yml")

# 读取文件
with open(data_path, "r") as f:
    content = f.read()
    # 此处处理文件内容

该配置项会返回当前执行的notebook真实路径,无论notebook1是直接运行还是被notebook2通过%run调用,都能正确定位到alpha目录下的data.yml。

方法2:使用DBFS绝对路径(生产环境优先)

将data.yml存储到DBFS固定位置(比如/dbfs/alpha/data.yml),notebook1直接用绝对路径读取:

data_path = "/dbfs/alpha/data.yml"
with open(data_path, "r") as f:
    content = f.read()
    # 此处处理文件内容

这种方式彻底规避路径上下文问题,适合稳定的生产环境,无需依赖notebook执行上下文。

方法3:通过%run传递目录参数

在notebook2调用notebook1时,手动传递notebook1的目录路径:

  • notebook2中:
notebook1_dir = "/Workspace/alpha"
%run ../alpha/notebook1 $notebook_dir=$notebook1_dir
  • notebook1中:
import os
# 接收传递的目录参数
data_path = os.path.join(notebook_dir, "data.yml")
with open(data_path, "r") as f:
    content = f.read()
    # 此处处理文件内容

此方法需要调用方配合传递参数,适合临时调试或特殊场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:47:49