Data Factory调用Databricks Workflow时如何获取笔记本返回输出?
解决ADF调用Databricks Workflow时无法获取笔记本输出的问题
问题原因
你遇到的报错是因为Databricks Workflow(Job)的runOutput默认不会自动继承笔记本通过dbutils.notebook.exit()返回的值。直接调用笔记本时,ADF能读取到笔记本的runOutput,但通过Job调用时,Job本身的runOutput默认是空的,需要手动配置将笔记本的输出传递给Job的runOutput。
解决方案
按以下步骤配置Databricks Job和ADF管道:
配置Databricks Job捕获笔记本输出
- 打开你的Databricks Job,进入任务配置页面
- 找到对应笔记本任务的**「任务输出」**区域,添加一个输出变量(比如命名为
notebook_return_value),变量值填写:
注意替换{{task_values.<你的笔记本任务名称>.run_output}}<你的笔记本任务名称>为实际的任务名称(比如你Job里的笔记本任务叫ProcessData,就写{{task_values.ProcessData.run_output}})
设置Job的全局运行输出
- 进入Job的**「高级」**设置页面
- 找到**「运行输出」**选项,填写表达式:
同样替换任务名称,这样Job的全局{{tasks.<你的笔记本任务名称>.outputs.notebook_return_value}}runOutput就会被设置为笔记本返回的值
在ADF中正确读取输出
- 保持ADF管道中调用Databricks Job的活动不变,修改读取输出的表达式为:
如果笔记本返回的是JSON字符串,还可以用@activity('调用Databricks Job的活动名称').output.runOutputjson()函数解析:@json(activity('调用Databricks Job的活动名称').output.runOutput)
- 保持ADF管道中调用Databricks Job的活动不变,修改读取输出的表达式为:
额外注意事项
- 如果你的Workflow是多任务流水线,确保只捕获目标笔记本任务的输出,避免混淆不同任务的返回值
dbutils.notebook.exit()只能返回字符串类型,若要传递复杂数据(如字典、列表),需先序列化为JSON字符串,比如:import json output_data = {"status": "success", "count": 100} dbutils.notebook.exit(json.dumps(output_data))
内容的提问来源于stack exchange,提问作者user1948635
相关产品推荐
相关产品推荐

