Share information between tasks in a Databricks job | Databricks on AWS [2023/5/15時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
Databricksジョブのタスク間で任意のパラメーターを引き渡すためにタスクバリューを活用することができます。DatabricksユーティリティのtaskValuesサブユーティリティを用いることで、タスクバリューを引き渡すことができます。taskValuesサブユーティリティによって、タスクは後段のタスクで参照可能な値を出力することができるシンプルなAPIを提供し、より表現豊かなワークフローを作成することが容易となります。例えば、ジョブの実行の際に、異なるタスク間で機械学習モデルの評価に関する情報のような、メトリクスやIDをやり取りすることができます。それぞれのタスクでは複数のタスクバリューを設定、取得することができます。タスクバリューは、Pythonノートブックで設定、取得が可能です。
タスクバリューの活用
taskValuesサブユーティリティは、2つのコマンドを提供します: 変数を設定するためのdbutils.jobs.taskValues.set()と編集を取得するためのdbutils.jobs.taskValues.get()です。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表現のサイズは48KiBを超えることができません。
以下の例では、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はタスクバリューのキー名です。コマンドがこのタスクバリューのキーを見つけられなかった場合、(defaultが設定されていない限り)ValueErrorが発生します。 -
defaultはkeyが見つからなった場合に返却されるオプションの値です。defaultをNoneにすることはできません。 -
debugValueは、ジョブの外で稼働しているノートブック内からタスクバリューを取得しようとした際に返却されるオプションの値です。これは、ノートブックを手動で実行して、デフォルトのTypeErrorを発生させるのではなく、何かしらの値を取得したいデバッグのケースで有用です。debugValueをNoneにすることはできません。
タスク間でのコンテキストを共有するさらに複雑な例として、さまざまな個人の属性に対して、個人の収入を予測する複数の機械学習を含むアプリケーションと、3つのタスクのアウトプットに基づいてベストなモデルを特定するタスクがあるものとします。Logistic_Regression、Decision_Tree、Random_Forestという3つのタスクでモデルが実行され、Best_Modelタスクがこれら3つのタスクのアウトプットに基づいてベストなモデルを特定します。

ベストなパフォーマンスを示すアルゴリズムを特定するために、それぞれのモデルの精度(分類器がどれだけ良好に収入を予測したのか)がタスクバリューとして引き渡されます。例えば、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")
タスクバリューの参照
タスク実行後にタスクバリューを参照するには、タスクのタスク実行履歴に移動します。Outputパネルにタスクバリューの結果が表示されます。