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パネルにタスクバリューの結果が表示されます。