Sdílet prostřednictvím


Předávání informací mezi úkoly pomocí hodnot úkolů

Hodnoty úkolů odkazují na subutilitu nástrojů taskValues Databricks, která umožňuje předávat libovolné hodnoty mezi úkoly v úloze Databricks. Viz subutility taskValues (dbutils.jobs.taskValues).

V jednom úkolu zadáte pár dbutils.jobs.taskValues.set() klíč-hodnota a pak můžete použít název a klíč úkolu k odkazování na hodnotu v následujících úkolech.

Poznámka:

Dílčí nástroje dbutils.jobs.taskValues.set() a dbutils.jobs.taskValues.get() jsou dostupné jenom v poznámkových blocích Pythonu. Hodnoty úkolů můžete odkazovat pomocí odkazů na dynamické hodnoty pro všechny úkoly, které podporují parametry. Viz Referenční hodnoty úkolů.

Nastavení hodnot úkolů

Nastavte hodnoty úkolů v poznámkových blocích Pythonu pomocí subutility dbutils.jobs.taskValues.set().

Klíče hodnot úkolů musí být řetězce. Každý klíč musí být jedinečný, pokud máte v poznámkovém bloku definovaných více hodnot úkolů.

Hodnoty úkolů můžete přiřadit ke klíčům ručně nebo programově. Jsou povoleny pouze hodnoty, které lze vyjádřit jako platný json. Velikost reprezentace JSON hodnoty nesmí překročit 48 KiB.

Například následující příklad nastaví statický řetězec pro klíč fave_food:

dbutils.jobs.taskValues.set(key = "fave_food", value = "beans")

Následující příklad používá parametr úkolu poznámkového bloku k dotazování všech záznamů na konkrétní číslo objednávky a vrácení aktuálního stavu objednávky a celkového počtu záznamů:

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

Pomocí tohoto vzoru můžete předat seznamy hodnot a pak je použít ke koordinaci podřízené logiky, například pro jednotlivé úkoly. Viz Spuštění parametrizované úlohy Azure Databricks ve smyčce.

Následující příklad extrahuje jedinečné hodnoty pro ID produktu do seznamu Pythonu a nastaví tuto hodnotu jako hodnotu úkolu:

prod_list = list(spark.read.table("products").select("prod_id").distinct().toPandas()["prod_id"])

dbutils.jobs.taskValues.set(key = "prod_list", value = prod_list)

Referenční hodnoty úkolů

Databricks doporučuje odkazovat na hodnoty úkolů jako parametry úkolů nakonfigurované pomocí vzoru {{tasks.<task_name>.values.<value_name>}}odkazu na dynamické hodnoty .

Pokud například chcete odkazovat na hodnotu úkolu s klíčem prod_list z pojmenovaného product_inventoryúkolu, použijte syntaxi {{tasks.product_inventory.values.prod_list}}.

Viz Konfigurace parametrů úkolu a Co je odkaz na dynamickou hodnotu?

Použití dbutils.jobs.taskValues.get

Syntaxe dbutils.jobs.taskValues.get() vyžaduje zadání názvu nadřazeného úkolu. Tato syntaxe se nedoporučuje, protože můžete použít hodnoty úkolů ve více podřízených úkolech, což znamená, že pokud se změní název úkolu, je potřeba provést řadu aktualizací.

Pomocí této syntaxe můžete volitelně zadat default hodnotu a debugValuehodnotu . Výchozí hodnota se použije v případě, že klíč nebyl nalezen. Umožňuje debugValue nastavit statickou hodnotu, která se má použít při ručním vývoji a testování kódu v poznámkových blocích, než poznámkový blok naplánujete jako úlohu.

Následující příklad získá hodnotu klíče order_status nastaveného v názvu order_lookupúkolu . Hodnota Delivered se vrátí pouze při interaktivním spuštění poznámkového bloku.

order_status = dbutils.jobs.taskValues.get(taskKey = "order_lookup", key = "order_status", debugValue = "Delivered")

Poznámka:

Databricks nedoporučuje nastavit výchozí hodnoty, protože může být náročné řešit potíže a zabránit očekávaným chybným zprávám kvůli chybějícím klíčům nebo nesprávně pojmenovaných úlohám.

Zobrazení hodnot úkolů

Vrácená hodnota hodnoty úkolu pro každé spuštění se zobrazí na panelu Výstup podrobností o spuštění úlohy. Viz Zobrazení historie spuštění úlohy.