Azure Databricks ジョブのタスク間で情報を共有する

"タスク値" を使用して、Azure Databricks ジョブ内のタスク間で任意のパラメーターを渡すことができます。 タスク値は、Databricks ユーティリティの taskValues サブユーティリティを使用して渡します。 taskValues サブユーティリティは、タスクが後続のタスクで参照できる値を出力できるようにする単純な API を提供し、より表現力の高いワークフローを簡単に作成できるようにします。 たとえば、ジョブ実行内の異なるタスク間で、機械学習モデルの評価に関する情報などの識別子やメトリックを伝達できます。 各タスクによって、複数のタスク値を設定し、取得することができます。 タスク値は、Python ノートブックで設定および取得できます。

Note

ノートブックで動的値参照を使用して、アップストリーム タスクで設定されたタスク値を参照できるようになりました。 たとえば、タスク Get_user_data によって設定されたキー name を使用して値を参照するには、{{tasks.Get_user_data.values.name}} を使用します。 複数のタスクの種類で使用できるため、Databricks では、dbutils.jobs.taskValues.get ではなく動的値参照を使用して、タスク値をプログラムで取得することをお勧めします。

タスク値の使用

taskValues サブユーティリティには、変数を設定する dbutils.jobs.taskValues.set() と値を取得する dbutils.jobs.taskValues.get() の 2 つのコマンドがあります。 2 つのノートブック タスク Get_user_data および Analyze_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 が見つからない場合に返される省略可能な値です。 defaultNone は指定できません。
  • debugValue は、ジョブの外部で実行されているノートブック内からタスク値を取得しようとすると返される省略可能な値です。 これは、ノートブックを手動で実行し、デバッグ中に既定で TypeError を発生させるのではなく値を返す場合に役立ちます。 debugValueNone は指定できません。

タスク間でコンテキストを共有するより複雑な例として、さまざまな個人属性を指定して個人の収入を予測するための複数の機械学習モデルを含むアプリケーションと、前の 3 つのタスクからの出力に基づいて使用する最適なモデルを決定するタスクがあるとします。 モデルは、Logistic_RegressionDecision_Tree、および Random_Forest という名前の 3 つのタスクによって実行され、Best_Model タスクで、前の 3 つのタスクからの出力に基づいて使用する最適なモデルを決定します。

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")

タスク値を表示する

タスクの実行後にタスク値の値を表示するには、タスクのタスク実行履歴に移動します。 タスク値の結果が [出力] パネルに表示されます。