使用任務值在任務之間傳遞資訊
任務值是指 Databricks 公用程式 taskValues
子公用程式,這可讓您在 Databricks 工作中的任務之間傳遞任意值。 請參閱 taskValues 子公用程式 (dbutils.jobs.taskValues)。
您可以在一個任務中使用 dbutils.jobs.taskValues.set()
來指定索引鍵/值組,然後使用任務名稱和索引鍵來參考後續任務中的值。
注意
子公用程式 dbutils.jobs.taskValues.set()
和 dbutils.jobs.taskValues.get()
僅在 Python 筆記本可用。 您可以使用支援參數之所有任務的動態值參考來參考任務值。 請參閱參考任務值。
設定任務值
使用子公用程式 dbutils.jobs.taskValues.set()
,在 Python 筆記本中設定任務值。
任務值索引鍵必須是字串。 如果您的筆記本中定義了多個任務值,則每個索引鍵都必須是唯一的。
您可以手動或以程式設計方式將任務值指派給索引鍵。 僅允許可以有效 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])
您可以使用此模式來傳遞值清單,然後使用它們來協調下游邏輯,例如針對每項任務。 請參閱在迴圈中執行參數化 Azure Databricks 工作任務。
下列範例會將產品識別碼的相異值擷取至 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_lookup
中設定的索引鍵 order_status
的值。 僅當以互動方式執行筆記本時才會傳回值 Delivered
。
order_status = dbutils.jobs.taskValues.get(taskKey = "order_lookup", key = "order_status", debugValue = "Delivered")
注意
Databricks 不建議設定預設值,因為它們可能難以進行疑難排解,並防止由於遺漏索引鍵或錯誤命名的任務而出現預期的錯誤訊息。
檢視任務值
每個執行的任務值的傳回值會顯示在 [任務執行詳細資料] 的 [輸出] 面板中。 請參閱檢視任務執行歷程記錄。