如何实现Databricks任务参数与Notebook变量互相赋值?
Databricks任务参数与Notebook Widget变量共享过滤值实现方案
一、任务参数自动传递给Notebook变量
你当前的代码已经具备接收任务参数的能力,只要保证Job Task配置的参数名称和Notebook里widget的name(即field)完全一致(大小写敏感),运行Job时,任务参数的值会自动覆盖widget的defaultValue,并赋值给变量f1。
举个例子:如果任务参数里给field设置值为'region',那么代码执行后f1的值就是'region',不需要额外修改现有代码。
二、Notebook变量传递给后续任务参数
如果需要把当前Notebook里的f1值传给同一个Job中的其他任务参数,可以用Databricks内置的任务值传递功能:
- 在当前Notebook中添加代码,将变量值存入任务共享空间:
# 存储变量到任务共享空间,key自定义,比如'shared_filter' dbutils.jobs.taskValues.set(key='shared_filter', value=f1)
- 在后续任务中,通过以下方式获取该值:
- 如果后续任务也是Notebook任务,可以在其代码中添加:
# taskKey为当前任务的名称,key对应存储时的key shared_value = dbutils.jobs.taskValues.get(taskKey='当前任务名称', key='shared_filter') # 可将值赋值给当前Notebook的widget或变量 dbutils.widgets.text(name='field', defaultValue=shared_value, label='field') f1 = shared_value - 如果后续任务是其他类型(比如Spark任务),可以在任务参数配置中直接引用
{{tasks.当前任务名称.values.shared_filter}}来获取值。
- 如果后续任务也是Notebook任务,可以在其代码中添加:
注意事项
- 手动运行Notebook时,widget会显示输入框,用户输入的值会赋值给
f1;通过Job运行时,任务参数会自动填充widget值,无需手动输入。 - 任务参数名称和widget的
name必须完全匹配,否则无法自动传递。
内容的提问来源于stack exchange,提问作者mystiquenoir
相关产品推荐
相关产品推荐

