Widgets Databricks
Les widgets d’entrée vous permettent d’ajouter des paramètres à vos notebooks et tableaux de bord. L’API Widget se compose d’appels permettant de créer différents types de widgets d’entrée, de les supprimer et d’accéder aux valeurs liées.
Dans Databricks Runtime 11.0 et versions ultérieures, vous pouvez également utiliser des ipywidgets dans les notebooks Databricks.
Les widgets Databricks sont parfaitement adaptés pour :
- Génération d’un notebook ou d’un tableau de bord réexécuté avec des paramètres différents
- Exploration rapide des résultats d’une requête unique avec des paramètres différents
Consultez la documentation de l’API Widget dans Scala, Python et R avec la commande suivante : dbutils.widgets.help()
Types de widgets Databricks
Il existe 4 types de widgets :
text
: entrée d’une valeur dans une zone de texte.dropdown
: sélection d’une valeur dans une liste de valeurs fournies.combobox
: combinaison de texte et de liste déroulante. Sélectionnez une valeur dans la liste fournie ou entrez-en une dans la zone de texte.multiselect
: sélection d’une ou plusieurs valeurs dans une liste de valeurs fournies.
Les listes déroulantes et zones de texte des widgets apparaissent immédiatement après la barre d’outils du notebook.
API de widget Databricks
L’API Widget est conçue pour être cohérente dans Scala, Python et R. L’API widget dans SQL est légèrement différente, mais aussi puissante que celle des autres langages. Vous gérez les widgets via l’interface de Databricks Utilites.
- Le premier argument de tous les types de widgets est
name
. Il s’agit du nom que vous utilisez pour accéder au widget. - Le deuxième argument est
defaultValue
; la valeur par défaut du widget. - Pour tous les types de widgets, le troisième argument à l’exception de
text
estchoices
, une liste de valeurs que le widget peut prendre. Cet argument n’est pas utilisé pour les widgets de typetext
. - Le dernier argument est
label
, une valeur facultative pour l’étiquette affichée sur la zone de texte ou la liste déroulante du widget.
Les widgets acceptent uniquement les valeurs de chaîne.
Python
dbutils.widgets.dropdown("state", "CA", ["CA", "IL", "MI", "NY", "OR", "VA"])
dbutils.widgets.text("database", "customers_dev")
SQL
CREATE WIDGET DROPDOWN state DEFAULT "CA" CHOICES SELECT * FROM (VALUES ("CA"), ("IL"), ("MI"), ("NY"), ("OR"), ("VA"))
CREATE WIDGET TEXT database DEFAULT "customers_dev"
Exemple de widget Databricks
Pour obtenir une documentation détaillée sur l’API pour chaque méthode, utilisez dbutils.widgets.help("<method-name>")
. L’API d’aide est identique dans tous les langages. Par exemple :
dbutils.widgets.help("dropdown")
Créez un widget de liste déroulante simple.
Python
dbutils.widgets.dropdown("state", "CA", ["CA", "IL", "MI", "NY", "OR", "VA"])
SQL
CREATE WIDGET DROPDOWN state DEFAULT "CA" CHOICES SELECT * FROM (VALUES ("CA"), ("IL"), ("MI"), ("NY"), ("OR"), ("VA"))
Interagissez avec le widget à partir du panneau de celui-ci.
Vous pouvez accéder à la valeur actuelle du widget avec l’appel :
Python
dbutils.widgets.get("state")
SQL
SELECT "${state}"
Enfin, vous pouvez supprimer un widget ou tous les widgets d’un notebook :
Python
dbutils.widgets.remove("state")
dbutils.widgets.removeAll()
SQL
REMOVE WIDGET state
Si vous supprimez un widget, vous ne pouvez pas créer de widget dans la même cellule. Vous devez créer le widget dans une autre cellule.
Utilisation de valeurs de widget dans Spark SQL
Spark SQL accède aux valeurs du widget en tant que littéraux de chaîne qui peuvent être utilisés dans les requêtes.
Vous pouvez accéder aux widgets définis dans n’importe quel langage à partir de Spark SQL lors de l’exécution interactive de notebooks. Observez le flux de travail suivant :
Créez un widget de liste déroulante de toutes les bases de données dans le catalogue actuel :
dbutils.widgets.dropdown("database", "default", [database[0] for database in spark.catalog.listDatabases()])
Créez un widget de texte pour spécifier manuellement un nom de table :
dbutils.widgets.text("table", "")
Exécutez une requête SQL pour afficher toutes les tables d’une base de données (sélectionnées dans la liste déroulante) :
SHOW TABLES IN ${database}
Entrez manuellement un nom de table dans le widget
table
.Affichez un aperçu du contenu d’une table sans avoir à modifier le contenu de la requête :
SELECT * FROM ${database}.${table} LIMIT 100
Notes
En général, vous ne pouvez pas utiliser de widgets pour passer des arguments entre différents langages dans un notebook. Vous pouvez créer un widget arg1
dans une cellule Python, et l’utiliser dans une cellule SQL ou Scala si vous exécutez une cellule à la fois. Mais cela ne fonctionne pas si vous utilisez la fonction Exécuter tout ou exécutez le notebook en tant que travail.
Solutions de contournement :
- Pour les notebooks qui ne mélangent pas de langues, vous pouvez créer un notebook pour chaque langue et transmettre les arguments lorsque vous exécutez le notebook.
- Vous pouvez accéder au widget à l’aide d’un appel
spark.sql()
. Par exemple, dans Python :spark.sql("select getArgument('arg1')").take(1)[0][0]
.
- Vous pouvez accéder au widget à l’aide d’un appel
Configurer les paramètres des widgets
Vous pouvez configurer le comportement des widgets lors de la sélection d’une nouvelle valeur si le panneau du widget est toujours épinglé en haut du notebook et si vous modifiez la disposition des widgets dans le notebook.
Cliquez sur l’icône
à l’extrémité droite du panneau de widget.
Dans la boîte de dialogue contextuelle Paramètres du panneau du widget, choisissez le comportement d’exécution du widget.
- Exécuter le notebook : chaque fois qu’une nouvelle valeur est sélectionnée, le notebook entier est réexécuté.
- Exécuter les commandes accessibles : chaque fois qu’une nouvelle valeur est sélectionnée, seules les cellules qui récupèrent les valeurs de ce widget particulier sont réexécutées. Il s’agit du paramètre par défaut quand vous créez un widget. Les cellules SQL ne sont pas réexécutées dans cette configuration.
- Ne rien faire : chaque fois qu’une nouvelle valeur est sélectionnée, rien n’est réexécuté.
Pour épingler les widgets en haut du notebook ou placer les widgets au-dessus de la première cellule, cliquez sur
. Le paramètre est enregistré au niveau de chaque utilisateur. Cliquez à nouveau sur l’icône en forme de punaise pour rétablir le comportement par défaut.
Si vous disposez de l’autorisation de Gestion pour les notebooks, vous pouvez configurer la disposition du widget en cliquant sur
. L’ordre et la taille de chaque widget peuvent être personnalisés. Pour enregistrer ou ignorer vos modifications, cliquez sur
.
La disposition du widget est enregistrée avec le notebook. Si vous modifiez la disposition des widgets par rapport à la configuration par défaut, les nouveaux widgets ne sont pas ajoutés par ordre alphabétique.
Pour rétablir la disposition du widget sur un ordre et une taille par défaut, cliquez sur
afin d’ouvrir la boîte de dialogue Paramètres du panneau du widget, puis cliquez sur Rétablir la disposition. La commande
removeAll()
ne réinitialise pas la disposition des widgets.
Exemple de notebook
Vous pouvez voir une démonstration du fonctionnement du paramètre Exécuter les commandes accessibles dans le notebook suivant. Le widget year
est créé avec le paramètre 2014
et utilisé dans l’API DataFrame et les commandes SQL.
Lorsque vous modifiez le paramètre du widget year
en 2007
, la commande DataFrame se réexécute, mais la commande SQL n’est pas réexécutée.
Notebook de démonstration du widget
Widgets Databricks dans les tableaux de bord
Lorsque vous créez un tableau de bord à partir d’un notebook contenant des widgets d’entrée, tous les widgets s’affichent en haut du tableau de bord. En mode présentation, chaque fois que vous mettez à jour la valeur d’un widget, vous pouvez cliquer sur le bouton Mettre à jour pour réexécuter le notebook et mettre à jour votre tableau de bord avec les nouvelles valeurs.
Utiliser les widgets Databricks avec %run
Si vous exécutez un notebook contenant des widgets, le notebook spécifié est exécuté avec les valeurs par défaut du widget. Vous pouvez également transmettre des valeurs aux widgets. Par exemple :
%run /path/to/notebook $X="10" $Y="1"
Cet exemple exécute le notebook spécifié et passe 10
au widget X et 1
au widget Y.
Limites
Il existe un problème connu où l’état d’un widget peut ne pas être correctement effacé après avoir appuyé sur Exécuter tout, même après l’effacement ou la suppression du widget dans le code. Si cela se produit, vous verrez une différence entre l’état visuel du widget et son état imprimé. La ré-exécution des cellules individuellement peut permettre de contourner ce problème. Pour éviter entièrement ce problème, Databricks vous recommande d’utiliser ipywidgets.