Utilisez les valeurs de tâche pour transmettre des informations entre les tâches.
Les **valeurs de tâche** font référence au sous-utilitaire des infrastructures taskValues publiques de Databricks, qui vous permet de transmettre des valeurs arbitraires entre les tâches dans un Job Databricks. Voir la sous-utilité taskValues (dbutils.jobs.taskValues).
Vous spécifiez une paire clé-valeur en utilisant dbutils.jobs.taskValues.set() dans une tâche, puis vous pouvez utiliser le nom de la tâche et la clé pour référencer la valeur dans les tâches suivantes.
Parce que dbutils.jobs.taskValues.set() et dbutils.jobs.taskValues.get() dans le sous-utilitaire dbutils.jobs.taskValues sont des fonctions Python, elles ne peuvent être utilisées que dans des notebooks dont le Python est sélectionné comme langue. Cependant, vous pouvez référencer des valeurs de tâche à l'aide de références de valeur dynamiques pour toutes les tâches qui prennent en charge les paramètres. Voir Référence des valeurs de tâche.
Définir les valeurs de tâche
Définir les valeurs de tâche dans les notebooks Python en utilisant dbutils.jobs.taskValues.set().
Les clés de valeur de tâche doivent être des chaînes de caractères. Chaque clé doit être unique si vous avez plusieurs valeurs de tâche définies dans un notebook.
Vous pouvez attribuer des valeurs de tâche aux clés manuellement ou par programme. Seules les valeurs pouvant être exprimées comme un JSON valide sont autorisées. La taille de la représentation JSON de la valeur ne peut pas dépasser 48 KiB.
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 parameter de tâche Notebook pour interroger tous les enregistrements pour un numéro de commande particulier et retourner l'état actuel de la commande 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 en utilisant ce modèle, puis les utiliser pour coordonner la logique en aval, par exemple pour chaque tâche. Consultez Utiliser une tâche For each pour exécuter une autre tâche en boucle.
L'exemple suivant extrait les valeurs distinctes pour l'ID produit dans une liste Python et définit cela comme une 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)
Référence aux valeurs de la tâche
Databricks recommande de référencer les valeurs de tâche comme des 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 à partir d’une tâche nommée product_inventory, utilisez la syntaxe {{tasks.product_inventory.values.prod_list}}.
Consultez Configurer les parameters de tâche et Références de valeur dynamique.
Utilisation dbutils.jobs.taskValues.get
La syntaxe dbutils.jobs.taskValues.get() exige de spécifier le 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.
En utilisant cette syntaxe, vous pouvez éventuellement spécifier une valeur default et un debugValue. La default valeur est utilisée si la clé ne peut pas être trouvée. Le debugValue vous permet de définir une valeur statique à utiliser pendant le développement et les tests manuels de 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")
Databricks ne recommande pas de définir des valeurs default, car elles peuvent être difficiles à dépanner et empêcher l’affichage des messages d’erreur attendus en raison de clés manquantes ou de tâches mal nommées.
Afficher les valeurs de tâche
La valeur retournée d'une valeur de tâche pour chaque exécution est affichée dans le volet **Sortie** des **Détails de l'exécution de la tâche**. Consulter Historique d'exécution des tâches.