如何通过代码向「Job as Task」类型的嵌套工作流传递参数?
解决Databricks Job as Task跨工作流参数传递问题
问题根源
你推测的完全正确:嵌套工作流(Task_B引用的独立Job)和父工作流属于完全独立的运行上下文,dbutils.jobs.taskValues仅能在同一个Job运行实例内的任务间共享数据,跨Job无法直接访问对方的任务上下文。
具体解决方案
1. 父工作流配置Task_B的参数传递
在父工作流的Task_B(Run Job类型)设置界面,找到「Parameters」区域:
- 添加参数
entity_ids,值填写{{tasks.Task_A.outputs.entity_ids}}(注意key要和Task_A中taskValues.set的key完全一致,比如你之前代码里的entity_id要统一改成entity_ids避免拼写错误)。 - 配置完成后,父工作流会自动将Task_A输出的参数值,作为运行嵌套工作流的输入参数传递过去。
2. 嵌套工作流读取参数
在嵌套工作流的Notebook中,改用dbutils.widgets接收参数,不要用taskValues.get:
# 定义参数,默认值为空列表 dbutils.widgets.text("entity_ids", "[]") # 获取参数并转换为列表格式 entity_ids = eval(dbutils.widgets.get("entity_ids"))
3. 实现Task_A的条件触发逻辑
如果需要Task_A判断是否执行Task_B:
- 在Task_A中添加输出值:检测到特定信息时执行
dbutils.jobs.taskValues.set("should_run", "true"),否则设为"false"。 - 回到父工作流的Task_B设置,在「Task dependencies」里选择「Run this task only if」,再选「A task has succeeded and a condition is met」,输入条件
{{tasks.Task_A.outputs.should_run}} == "true"。
内容的提问来源于stack exchange,提问作者Jens H
相关产品推荐
相关产品推荐

