Usare i valori dei task per passare informazioni tra task
I valori dei task si riferiscono alla sottoutilibilità taskValues
delle utilità di Databricks, che consente di passare valori arbitrari tra i task in un processo di Databricks. Vedere sottoutilità taskValues (dbutils.jobs.taskValues)..
Specificare una coppia chiave-valore usando dbutils.jobs.taskValues.set()
in un task e quindi usare il nome e la chiave del task per fare riferimento al valore nei task successivi.
Nota
Le sottoutilità dbutils.jobs.taskValues.set()
e dbutils.jobs.taskValues.get()
sono disponibili solo nei notebook Python. È possibile fare riferimento ai valori dei task usando riferimenti a valori dinamici per tutti i task che supportano i parametri. Vedere Valori del task di riferimento.
Impostare i valori del task
Impostare i valori del task nei notebook Python usando la sottoutilità dbutils.jobs.taskValues.set()
.
Chiavi e valori dei task devono essere stringhe. Ogni chiave deve essere univoca se sono stati definiti più valori di task in un notebook.
È possibile assegnare manualmente o a livello di codice i valori dei task alle chiavi. Sono consentiti solo valori che possono essere espressi come JSON validi. Le dimensioni della rappresentazione JSON del valore non possono superare i 48 KiB.
Nell'esempio seguente, ad esempio, viene impostata una stringa statica per la chiave fave_food
:
dbutils.jobs.taskValues.set(key = "fave_food", value = "beans")
Nell'esempio seguente, un parametro dell'attività notebook viene utilizzato per eseguire una query su tutti i record per un determinato numero di ordine e restituire lo stato dell'ordine corrente e il numero totale di record:
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])
È possibile passare elenchi di valori usando questo criterio e usarli quindi per coordinare la logica downstream, ad esempio per ogni task. Si veda Eseguire un'attività di processo di Azure Databricks con parametri in un ciclo.
L'esempio seguente estrae i valori distinti per l'ID prodotto in un elenco Python e lo imposta come valore del task:
prod_list = list(spark.read.table("products").select("prod_id").distinct().toPandas()["prod_id"])
dbutils.jobs.taskValues.set(key = "prod_list", value = prod_list)
Valori del task di riferimento
Databricks consiglia di fare riferimento ai valori del task come parametri del task configurati usando il modello di riferimento di valori dinamici {{tasks.<task_name>.values.<value_name>}}
.
Ad esempio, per fare riferimento al valore del task con la chiave prod_list
di un task denominato product_inventory
, usare la sintassi {{tasks.product_inventory.values.prod_list}}
.
Vedere Configurare i parametri dei task e Che cos'è un valore dinamico di riferimento?
Utilizzare dbutils.jobs.taskValues.get
.
Per la sintassi dbutils.jobs.taskValues.get()
è necessario specificare il nome del task upstream. Questa sintassi non è consigliata, perché è possibile usare i valori dei task in più task downstream, vale a dire che sono necessari più aggiornamenti se cambia il nome di un task.
Usando questa sintassi, è possibile specificare facoltativamente un valore default
e un debugValue
. Il valore predefinito viene utilizzato se non è possibile trovare la chiave. debugValue
consente di impostare un valore statico da usare durante lo sviluppo e il test manuali del codice nei notebook prima di pianificare il notebook come task.
L'esempio seguente ottiene il valore per il set di chiavi order_status
in un nome di task order_lookup
. Il valore Delivered
viene restituito solo quando si esegue il notebook in modo interattivo.
order_status = dbutils.jobs.taskValues.get(taskKey = "order_lookup", key = "order_status", debugValue = "Delivered")
Nota
Databricks non consiglia di impostare valori predefiniti, perché possono risultare difficili da risolvere e possono bloccare i messaggi di errore previsti a causa di chiavi mancanti o task denominati in modo errato.
Visualizzare i valori dei task
Il valore restituito di un valore del task per ogni esecuzione viene visualizzato nel pannello Output dei Dettagli esecuzione task. Vedere Visualizzare la cronologia di esecuzione dei task.