Partager des informations parmi des tâches dans un travail Azure Databricks

Vous pouvez utiliser des valeurs de tâche pour transmettre des paramètres arbitraires entre des tâches dans un travail Azure Databricks. Vous transmettez des valeurs de tâche à l’aide du sous-utilitaire taskValues dans Databricks Utilities. Le sous-utilitaire taskValues fournit une API simple qui permet aux tâches de générer des valeurs pouvant être référencées dans les tâches suivantes, ce qui facilite la création de workflows plus expressifs. Par exemple, vous pouvez communiquer des identificateurs ou des métriques, comme des informations sur l’évaluation d’un modèle Machine Learning, entre différentes tâches lors de l’exécution d’un travail. Chaque tâche peut définir et obtenir plusieurs valeurs de tâche. Les valeurs de tâche peuvent être définies et récupérées dans des notebooks Python.

Remarque

Vous pouvez maintenant utiliser des références de valeurs dynamiques dans vos notebooks pour référencer des valeurs de tâches définies dans des tâches en amont. Par exemple, pour référencer la valeur avec la clé name définie par la tâche Get_user_data, utilisez {{tasks.Get_user_data.values.name}}. Comme elles peuvent être utilisées avec plusieurs types de tâches, Databricks recommande d’utiliser les références de valeurs dynamiques plutôt que dbutils.jobs.taskValues.get pour récupérer la valeur de tâche par programmation.

Utilisation de valeurs de tâche

Le sous-utilitaire taskValues fournit deux commandes : dbutils.jobs.taskValues.set() pour définir une variable et dbutils.jobs.taskValues.get() pour récupérer une valeur. Supposez que vous avez deux tâches de notebook : Get_user_data et Analyze_user_data, et que vous souhaitez passer le nom et l’âge d’un utilisateur de la tâche Get_user_data à la tâche Analyze_user_data. L’exemple suivant définit le nom et l’âge de l’utilisateur dans la tâche Get_user_data :

dbutils.jobs.taskValues.set(key = 'name', value = 'Some User')
dbutils.jobs.taskValues.set(key = "age", value = 30)
  • key est le nom de la clé de valeur de la tâche. Ce nom doit être unique à la tâche.
  • value est la valeur pour la clé de valeur de cette tâche. Cette commande doit être en mesure de représenter la valeur en interne au format JSON. La taille de la représentation JSON de la valeur ne peut pas dépasser 48 Kio.

L’exemple suivant obtient ensuite les valeurs dans la tâche Analyze_user_data :

dbutils.jobs.taskValues.get(taskKey = "Get_user_data", key = "age", default = 42, debugValue = 0)
dbutils.jobs.taskValues.get(taskKey = "Get_user_data", key = "name", default = "Jane Doe")
  • taskKey est le nom de la tâche de travail qui définit la valeur. Si la commande ne parvient pas à trouver cette tâche, une erreur ValueError est déclenchée.
  • key est le nom de la clé de valeur de la tâche. Si la commande ne parvient pas à trouver la clé de la valeur de cette tâche, une erreur ValueError est déclenchée (sauf si la valeur default est spécifiée).
  • default est une valeur facultative retournée si key est introuvable. default ne peut pas être None.
  • debugValue est une valeur facultative retournée si vous essayez d’obtenir la valeur de tâche à partir d’un notebook qui s’exécute en dehors d’un travail. Cela peut être utile lors du débogage lorsque vous souhaitez exécuter votre notebook manuellement et retourner une valeur au lieu de déclencher une erreur TypeError par défaut. debugValue ne peut pas être None.

En guise d’exemple plus complexe de partage de contexte entre les tâches, supposez que vous disposez d’une application qui comprend plusieurs modèles Machine Learning pour prédire le revenu d’un individu en fonction de différents attributs personnels, et d’une tâche qui détermine le meilleur modèle à utiliser en fonction de la sortie des trois tâches précédentes. Les modèles sont exécutés par trois tâches nommées Logistic_Regression, Decision_Treeet Random_Forest, et la tâche Best_Model détermine le meilleur modèle à utiliser en fonction de la sortie des trois tâches précédentes.

Graph of example classification application

La justesse de chaque modèle (c’est-à-dire si le classifieur parvient ou non à prédire correctement le revenu) est transmise dans une valeur de tâche afin de déterminer l’algorithme le plus performant. Par exemple, le notebook de régression logistique associé à la tâche Logistic_Regression inclut la commande suivante :

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

Chaque tâche de modèle définit une valeur pour la clé model_performance. La tâche Best_Model lit la valeur pour chaque tâche, et utilise cette valeur afin de déterminer le modèle optimal. L’exemple suivant lit la valeur définie par la tâche Logistic_Regression :

logistic_regression = dbutils.jobs.taskValues.get(taskKey = "Logistic_Regression", key = "model_performance")

Afficher les valeurs de tâche

Pour afficher la valeur d’une tâche après l’exécution d’une tâche, accédez à l’historique d’exécution de la tâche. Les résultats de la valeur de tâche sont affichés dans le panneau Sortie.