如何将Databricks Notebook的Widget输出传递至另一个Notebook作为输入?
在Synapse Notebook间传递Pipeline参数的实现方案
修正第一个Notebook的参数处理代码
你原代码里的"input": dbutils.widgets.get("input")是无效语法,会导致运行报错,先调整第一个Notebook的代码,确保正确接收Pipeline参数并生成可用路径:
# 定义接收Synapse Pipeline参数的Widget dbutils.widgets.text("input", "", "") # 获取参数并拼接存储路径 input_path = "/mnt/" + dbutils.widgets.get("input") print(f"生成的目标路径:{input_path}")
这里将变量名改为input_path是为了避免和Python内置的input()函数冲突,你也可以保留原变量名input,但建议使用更清晰的命名。
在第二个Notebook中调用并复用变量
通过%run命令执行第一个Notebook后,第一个Notebook中定义的全局变量会自动传入当前会话,直接使用即可:
# 运行第一个Notebook(替换为你的第一个Notebook的实际路径或名称) %run ./第一个Notebook # 使用第一个Notebook生成的路径读取CSV文件 df = spark.read.csv(input_path) # 可选:查看数据样例验证结果 df.show()
可选:更严谨的参数传递方式(使用notebook.exit)
如果需要更可控的参数传递(比如动态指定参数或异步执行),可以用dbutils.notebook.exit()返回结果,再在第二个Notebook中接收:
- 修改第一个Notebook,末尾添加返回语句:
dbutils.widgets.text("input", "", "") input_path = "/mnt/" + dbutils.widgets.get("input") print(f"生成的目标路径:{input_path}") # 返回拼接后的路径 dbutils.notebook.exit(input_path)
- 第二个Notebook中调用并接收返回值:
# 调用第一个Notebook,指定超时时间(单位:秒)和传入参数 input_path = dbutils.notebook.run("./第一个Notebook", 60, {"input": "你的Pipeline参数值"}) # 读取CSV文件 df = spark.read.csv(input_path)
内容的提问来源于stack exchange,提问作者SHIBASHISH TRIPATHY
相关产品推荐
相关产品推荐

