在 Azure Databricks 作业中的任务之间共享信息

可以使用任务值在 Azure Databricks 作业中的任务之间传递任意参数。 可以使用 Databricks 实用工具中的 taskValues 子实用工具传递任务值。 taskValues 子实用工具提供一个简单的 API,使任务能够输出可在后续任务中引用的值,从而更轻松地创建更有表达性的工作流。 例如,可以在作业运行中的不同任务之间传递标识符或指标,例如有关机器学习模型评估的信息。 每个任务可以设置和获取多个任务值。 可以在 Python 笔记本中设置和检索任务值。

注意

你现在可以在笔记本中使用动态值引用来引用上游任务中设置的任务值。 例如,若要引用由任务 Get_user_data 设置的键 name 的值,请使用 {{tasks.Get_user_data.values.name}}。 由于它们可以与多个任务类型一起使用,Databricks 建议使用动态值引用而不是 dbutils.jobs.taskValues.get 以编程方式检索任务值。

使用任务值

taskValues 子实用工具提供两个命令:dbutils.jobs.taskValues.set() 用于设置变量,dbutils.jobs.taskValues.get() 用于检索值。 假设你有两个笔记本任务:Get_user_dataAnalyze_user_data,并想要将用户的姓名和年龄从 Get_user_data 任务传递到 Analyze_user_data 任务。 以下示例在 Get_user_data 任务中设置用户的名称和年龄:

dbutils.jobs.taskValues.set(key = 'name', value = 'Some User')
dbutils.jobs.taskValues.set(key = "age", value = 30)
  • key 是任务值键的名称。 此名称对于任务必须是唯一的。
  • value 是此任务值键的值。 此命令必须能够在内部以 JSON 格式表示值。 值的 JSON 表示形式的大小不能超过 48 KiB。

以下示例随后获取 Analyze_user_data 任务中的值:

dbutils.jobs.taskValues.get(taskKey = "Get_user_data", key = "age", default = 42, debugValue = 0)
dbutils.jobs.taskValues.get(taskKey = "Get_user_data", key = "name", default = "Jane Doe")
  • taskKey 是设置值的作业任务的名称。 如果命令找不到此任务,则会引发 ValueError
  • key 是任务值的键的名称。 如果命令找不到此任务值的键,则会引发 ValueError(除非指定了 default)。
  • default 是在找不到 key 时返回的可选值。 default 不能为 None
  • debugValue 是一个可选值,如果尝试从在作业外部运行的笔记本中获取任务值,则会返回该值。 如果要手动运行笔记本并返回一些值(而不是默认引发 TypeError),则它在调试过程中很有用。 debugValue 不能为 None

举一个在任务之间共享上下文的更复杂示例,假设在你的应用程序中,有多个机器学习模型根据各种个人属性预测个人的收入,并有一个任务根据前三个任务的输出确定要使用的最佳模型。 模型由名为 Logistic_RegressionDecision_TreeRandom_Forest 的三个任务运行,Best_Model 任务根据前三个任务的输出确定要使用的最佳模型。

Graph of example classification application

每个模型的准确度(分类器预测收入的准确度)在任务值中传递,以确定表现最好的算法。 例如,与 Logistic_Regression 任务关联的逻辑回归笔记本包含以下命令:

dbutils.jobs.taskValues.set(key = "model_performance", value = result)

每个模型任务为 model_performance 键设置一个值。 Best_Model 任务读取每个任务的值,并使用该值来确定最佳模型。 以下示例读取 Logistic_Regression 任务设置的值:

logistic_regression = dbutils.jobs.taskValues.get(taskKey = "Logistic_Regression", key = "model_performance")

查看任务值

若要查看任务运行后的任务值,请转到该任务的任务运行历史记录。 任务值结果显示在“输出”面板中。