Utiliser les valeurs de tâche pour transférer des informations entre les tâches
Les valeurs de tâche font référence au sous-utilitaire Databricks Utilities taskValues
, qui vous permet de transmettre des valeurs arbitraires entre les tâches d’un travail Databricks. Consultez Sous-utilitaire taskValues (dbutils.jobs.taskValues).
Vous spécifiez une paire clé-valeur à l’aide de dbutils.jobs.taskValues.set()
dans une tâche, puis utiliser le nom et la clé de la tâche pour référencer la valeur dans les tâches suivantes.
Remarque
Les sous-utilitaires dbutils.jobs.taskValues.set()
et dbutils.jobs.taskValues.get()
sont disponibles uniquement dans les Notebooks Python. Vous pouvez référencer des valeurs de tâche à l’aide de références de valeurs dynamiques pour toutes les tâches qui prennent en charge les paramètres. Consultez Valeurs de tâche de référence.
Valeurs de tâche définies
Définissez des valeurs de tâche dans les Notebooks Python à l’aide du sous-utilitaire dbutils.jobs.taskValues.set()
.
Les clés de valeurs de tâche doivent être des chaînes. Chaque clé doit être unique si vous avez plusieurs valeurs de tâche définies dans un Notebook.
Vous pouvez affecter des valeurs de tâche aux clés manuellement ou par programmation. Seules les valeurs qui peuvent être exprimées en tant que JSON valide sont autorisées. La taille de la représentation JSON de la valeur ne peut pas dépasser 48 Kio.
Par exemple, l’exemple suivant définit une chaîne statique pour la clé fave_food
:
dbutils.jobs.taskValues.set(key = "fave_food", value = "beans")
L’exemple suivant utilise un paramètre de tâche de Notebook pour interroger tous les enregistrements d’un numéro de commande particulier et renvoyer le statut de la commande actuelle et le nombre total d’enregistrements :
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])
Vous pouvez transmettre des listes de valeurs à l’aide de ce modèle, puis les utiliser pour coordonner la logique en aval, comme pour chaque tâche. Consultez Exécuter une tâche de travail Azure Databricks paramétrable dans une boucle.
L’exemple suivant extrait les valeurs distinctes de l’ID produit dans une liste Python et définit cette valeur en tant que valeur de tâche :
prod_list = list(spark.read.table("products").select("prod_id").distinct().toPandas()["prod_id"])
dbutils.jobs.taskValues.set(key = "prod_list", value = prod_list)
Valeurs de tâche de référence
Databricks recommande de référencer des valeurs de tâche en tant que paramètres de tâche configurés à l’aide du modèle de référence de valeur dynamique {{tasks.<task_name>.values.<value_name>}}
.
Par exemple, pour référencer la valeur de tâche avec la clé prod_list
depuis une tâche nommée product_inventory
, utilisez la syntaxe {{tasks.product_inventory.values.prod_list}}
.
Consultez Configurer les paramètres de tâche et Qu’est-ce qu’une référence de valeur dynamique ?
Utilisez dbutils.jobs.taskValues.get
.
La syntaxe dbutils.jobs.taskValues.get()
nécessite la spécification du nom de la tâche en amont. Cette syntaxe n’est pas recommandée, car vous pouvez utiliser des valeurs de tâche dans plusieurs tâches en aval, ce qui signifie que de nombreuses mises à jour sont nécessaires si un nom de tâche change.
À l’aide de cette syntaxe, vous pouvez éventuellement spécifier une valeur default
et un debugValue
. La valeur par défaut est utilisée si la clé est introuvable. LedebugValue
vous permet de définir une valeur statique à utiliser pendant le développement et le test manuels du code dans les Notebooks avant de planifier le Notebook en tant que tâche.
L’exemple suivant obtient la valeur de la clé order_status
définie dans un nom de tâche order_lookup
. La valeur Delivered
est renvoyée uniquement lors de l’exécution interactive du Notebook.
order_status = dbutils.jobs.taskValues.get(taskKey = "order_lookup", key = "order_status", debugValue = "Delivered")
Remarque
Databricks ne recommande pas de définir les valeurs par défaut, car elles peuvent être difficiles à résoudre et empêcher les messages d’erreur attendus en raison de clés manquantes ou de tâches nommées incorrectement.
Afficher les valeurs de tâche
La valeur retournée d’une valeur de tâche pour chaque exécution s’affiche dans le panneau Production des détails de l’exécution de la tâche. Consultez Afficher l’historique des exécutions des tâches.