タスクの値を使用してタスク間で情報を渡す
タスク値は、Databricksジョブ内のタスク間で任意の値を渡すことができる Databricks ユーティリティ taskValues
サブユーティリティを参照します。taskValues サブユーティリティ (dbutils.ジョブ.taskValues)を参照してください。
1 つのタスクで dbutils.jobs.taskValues.set()
を使用してキーと値のペアを指定し、タスク名とキーを使用して後続のタスクで値を参照できます。
注:
サブユーティリティ dbutils.jobs.taskValues.set()
と dbutils.jobs.taskValues.get()
は、Python ノートブックでのみ使用できます。 タスク値は、パラメーターをサポートするすべてのタスクの動的値参照を使用して参照できます。 参照タスク値を参照してください。
タスクの値を設定する
Python ノートブックでタスク値を設定するには、サブユーティリティ dbutils.jobs.taskValues.set()
を使用します。
タスク値のキーは文字列である必要があります。 ノートブックに複数のタスク値が定義されている場合は、各キーが一意である必要があります。
タスクの値をキーに手動またはプログラムで割り当てることができます。 有効な JSON として表現できる値のみが許可されます。 値の JSON 表現のサイズは 48 KiB を超えることはできません。
たとえば、次の例では、キー の静的文字列を設定します fave_food
。
dbutils.jobs.taskValues.set(key = "fave_food", value = "beans")
次の例では、ノートブック タスク パラメーターを使用して、特定の注文番号のすべてのレコードを照会し、現在の注文状態とレコードの合計数を返します。
from pyspark.sql.functions import col
order_num = dbutils.widgets.get("order_num")
query = (spark.read.table("orders")
.orderBy(col("updated"), ascending=False)
.select(col("order_status"))
.where(col("order_num") == order_num)
)
dbutils.jobs.taskValues.set(key = "record_count", value = query.count())
dbutils.jobs.taskValues.set(key = "order_status", value = query.take(1)[0][0])
このパターンを使用して値のリストを渡し、それらを使用して各タスクなどのダウンストリーム ロジックを調整できます。 「 パラメーター化された Databricks ジョブ タスクをループで実行する」を参照してください。
次の例では、製品 ID の個別の値を Python リストに抽出し、これをタスク値として設定します。
prod_list = list(spark.read.table("products").select("prod_id").distinct().toPandas()["prod_id"])
dbutils.jobs.taskValues.set(key = "prod_list", value = prod_list)
参照タスクの値
Databricks では、動的値参照パターン {{tasks.<task_name>.values.<value_name>}}
を使用して構成されたタスク パラメーターとしてタスク値を参照することをお勧めします。
たとえば、product_inventory
という名前のタスクのキー prod_list
を持つタスク値を参照するには、構文 {{tasks.product_inventory.values.prod_list}}
を使用します。
「タスク パラメーターの構成」および「動的値参照とは」を参照してください。
dbutils.jobs.taskValues.get
を使用する
構文 dbutils.jobs.taskValues.get()
では、アップストリーム タスク名を指定する必要があります。 この構文は、複数のダウンストリーム タスクでタスク値を使用できるため、タスク名が変更された場合に多数の更新が必要になるため、お勧めしません。
この構文を使用して、オプションで default
値と debugValue
を指定できます。 キーが見つからない場合は、デフォルト値が使用されます。 この debugValue
では、ノートブックをタスクとしてスケジュールする前に、ノートブックでの手動コード開発およびテスト中に使用する静的な値を設定できます。
次の例では、タスク名 に設定されたキー order_status
の値を取得します order_lookup
。 値 Delivered
は、ノートブックを対話形式で実行している場合にのみ返されます。
order_status = dbutils.jobs.taskValues.get(taskKey = "order_lookup", key = "order_status", debugValue = "Delivered")
注:
Databricks では、キーの欠落やタスクの名前の誤りによる予期されるエラーメッセージのトラブルシューティングや防止が困難な場合があるため、デフォルト値の設定はお勧めしません。
タスク値の表示
各実行のタスク値の戻り値は、タスク実行の詳細の [出力] パネルに表示されます。「タスク実行履歴の表示」を参照してください。