Utiliser dbx avec Visual Studio Code
Cette documentation a été retirée et pourrait ne pas être mise à jour.
Databricks vous recommande d’utiliser les Declarative Automation Bundles au lieu de dbx par Databricks Labs. Consultez Qu’est-ce que les Declarative Automation Bundles ? et Migrer de dbx vers des bundles.
Pour utiliser Databricks avec Visual Studio Code, consultez l'article Extension Databricks pour Visual Studio Code.
Cet article décrit un exemple de code basé sur Python avec lequel vous pouvez travailler dans n’importe quel IDE compatible Python. Plus précisément, cet article décrit comment travailler avec cet exemple de code dans Visual Studio Code, qui offre les fonctionnalités suivantes pour la productivité des développeurs :
- Complétion de code
- Lintage
- Test en cours
- Debugging les objets de code qui ne nécessitent pas de connexion en temps réel aux Ressources Databricks distantes.
Cet article utilise dbx par Databricks Labs, ainsi que Visual Studio Code, pour soumettre l'exemple de code à un workspace Databricks distant. dbx demande à Databricks via les Lakeflow Jobs d'exécuter le code soumis sur un cluster de jobs Databricks dans ce workspace.
Vous pouvez utiliser des fournisseurs Git tiers populaires pour le contrôle de version et les fonctionnalités d’intégration et de livraison continues (CI/CD) ou le déploiement continu de votre code. Pour le contrôle de version, ces fournisseurs Git incluent les suivants :
- GitHub
- Bitbucket
- GitLab
- Azure DevOps (non disponible dans les régions Azure Chine)
- AWS CodeCommit
- GitHub AE
Pour le CI/CD, dbx prend en charge les plates-formes CI/CD suivantes :
Pour démontrer comment le contrôle de version et le CI/CD peuvent fonctionner, cet article décrit comment utiliser Visual Studio Code, dbx, et cet exemple de code, ainsi que GitHub et GitHub Actions.
Exigences relatives aux exemples de code
Pour utiliser cet exemple de code, vous devez disposer des éléments suivants :
- Un Workspace Databricks dans votre compte Databricks.
- Un compte GitHub. Créer un compte GitHub, si vous n’en avez pas déjà un.
De plus, sur votre machine de développement locale, vous devez disposer des éléments suivants :
-
Python version 3.8 ou supérieure.
Vous devriez utiliser une version de Python qui correspond à celle installée sur vos clusters cibles. Pour obtenir la version de Python installée sur un cluster existant, vous pouvez utiliser le terminal web du cluster pour exécuter la commande
python --version. Voir aussi la section «System environment» dans les Notes de version et compatibilité de Databricks Runtime pour la version de Databricks Runtime de vos clusters cibles. Dans tous les cas, la version de Python doit être 3.8 ou une version ultérieure.Pour obtenir la version de Python actuellement référencée sur votre machine locale, exécutez
python --versiondepuis votre terminal local. (Selon la façon dont vous avez configuré Python sur votre machine locale, vous devrez peut-être exécuterpython3au lieu depythontout au long de cet article.) Voir aussi Sélectionner un interpréteur Python. -
pip.
pipest automatiquement installé avec les versions plus récentes de Python. Pour vérifier sipipest déjà installé, exécutezpip --versiondepuis votre terminal local. (Selon la façon dont vous avez configuré Python oupipsur votre machine locale, vous devrez peut-être exécuterpip3au lieu depipdans cet article.) -
dbx version 0.8.0 ou supérieure. Vous pouvez installer le package
dbxà partir de l’Index des packages Python (PyPI) en exécutantpip install dbx.
Vous n'avez pas besoin d'installer dbx maintenant. Vous pouvez l'installer ultérieurement dans la section configuration de l'exemple de code.
-
Une méthode pour créer des environnements virtuels Python afin de vous assurer que vous utilisez les bonnes versions de Python et les dépendances de packages dans vos projets
dbx. Cet article couvre pipenv. -
La version 0.18 ou antérieure du CLI Databricks, configurée avec l'authentification.
Vous n'avez pas besoin d'installer l'ancienne CLI Databricks (CLI Databricks version 0.17) maintenant. Vous pouvez l'installer plus tard dans la section configuration de l'exemple de code. Si vous souhaitez l'installer plus tard, vous devez vous rappeler de configurer l'authentification à ce moment-là.
-
L'extension Python pour Visual Studio Code.
-
L'extension Demandes de tirage et Problèmes GitHub pour Visual Studio Code.
-
Git.
À propos de l'exemple de code
L'exemple de code Python pour cet article, disponible dans le dépôt databricks/ide-best-practices sur GitHub, effectue les opérations suivantes :
- Obtient des données du dépôt owid/covid-19-data dans GitHub.
- Filtre les données pour un code pays ISO spécifique.
- Crée un tableau croisé dynamique à partir des données.
- Effectue le nettoyage de données sur les données.
- Modularise la logique du code en fonctions réutilisables.
- Teste les fonctions unitaires.
- Fournit les configurations et paramètres de projet
dbxpour permettre au code d'écrire les données dans une table Delta dans un workspace Databricks distant.
Configurer l'exemple de code
Une fois que vous avez mis en place les exigences pour cet exemple de code, suivez les étapes suivantes pour commencer à l'utiliser.
Ces étapes n'incluent pas la configuration de cet exemple de code pour CI/CD. Vous n'avez pas besoin de configurer CI/CD pour exécuter cet exemple de code. Si vous souhaitez configurer CI/CD ultérieurement, consultez Exécuter avec GitHub Actions.
Étape 1 : créer un environnement virtuel Python
-
Depuis votre terminal, créez un dossier vide pour contenir un environnement virtuel pour cet exemple de code. Ces instructions utilisent un dossier parent nommé
ide-demo. Vous pouvez donner à ce dossier le nom que vous souhaitez. Si vous utilisez un nom différent, remplacez le nom dans tout cet article. Après avoir créé le dossier, basculez vers celui-ci, puis start Visual Studio Code à partir de ce dossier. Assurez-vous d’inclure le point (.) après la commandecode.Pour Linux et macOS :
Bashmkdir ide-demo
cd ide-demo
code .
Si vous obtenez l'erreur command not found: code, consultez Lancement à partir de la ligne de commande sur le site web de Microsoft.
Pour Windows :
md ide-demo
cd ide-demo
code .
-
Dans Visual Studio Code, dans la barre de menus, cliquez sur View > Terminal .
-
Depuis la racine du dossier
ide-demo, exécutez la commandepipenvavec l’option suivante, où<version>est la version cible de Python que vous avez déjà installée localement (et, idéalement, une version qui correspond à la version de Python de vos clusters cibles), par exemple3.8.14.Bashpipenv --python <version>Notez la valeur
Virtualenv locationdans la sortie de la commandepipenv, car vous en aurez besoin à l'étape suivante. -
Sélectionnez l'interpréteur Python cible, puis activez l'environnement virtuel Python :
-
Dans la barre de menus, cliquez sur Affichage > Palette de commandes , tapez
Python: Select, puis cliquez sur Python : Sélectionner l'interpréteur . -
Sélectionnez l'interpréteur Python dans le chemin d'accès à l'environnement virtuel Python que vous venez de créer. (Ce chemin est répertorié comme la valeur
Virtualenv locationdans la sortie de la commandepipenv.) -
Dans la barre de menus, cliquez sur Afficher > Palette de commandes , tapez
Terminal: Create, puis cliquez sur Terminal : Créer un nouveau terminal . -
Assurez-vous que l'invite de commande indique que vous êtes dans le Shell
pipenv. Pour confirmer, vous devriez voir quelque chose comme(<your-username>)avant votre invite de commande. Si vous ne le voyez pas, exécutez la commande suivante :Bashpipenv shellPour quitter le Shell
pipenv, exécutez la commandeexit, et les parenthèses disparaissent.
Pour plus d'information, consultez Using Python environments in VS Code dans la documentation de Visual Studio Code.
-
Étape 2 : Cloner l'exemple de code de GitHub
- Dans Visual Studio Code, ouvrez le dossier
ide-demo( Fichier > Ouvrir le dossier ), s'il n'est pas déjà ouvert. - Cliquez sur **Afficher > Palette de commandes**,
Git: Clonetapez, puis cliquez sur **Git: Clone**. - Pour fournir l’URL du repository ou choisir une source de repository , saisissez
https://github.com/databricks/ide-best-practices - Accédez à votre
ide-demodossier et cliquez sur **Sélectionner l'emplacement du repository**.
Étape 3 : Installer les dépendances de l'exemple de code
-
Installez une version de
dbxet de la CLI Databricks version 0,18 ou antérieure, compatible avec votre version de Python. Pour ce faire, dans Visual Studio Code, depuis votre terminal, depuis votre dossieride-demoavec un Shellpipenvactivé (pipenv shell), exécutez la commande suivante :Bashpip install dbx -
Confirmez que
dbxest installé. Pour ce faire, exécutez la commande suivante :Bashdbx --versionSi le numéro de version est renvoyé,
dbxest installé.Si le numéro de version est inférieur à 0.8.0, mettez à niveau
dbxen exécutant la commande suivante, puis vérifiez à nouveau le numéro de version :Bashpip install dbx --upgrade
dbx --version
# Or ...
python -m pip install dbx --upgrade
dbx --version -
Lorsque vous installez
dbx, l'ancienne CLI Databricks (CLI Databricks version 0,17) est également installée automatiquement. Pour confirmer que l'ancienne version de Databricks CLI (Databricks CLI version 0.17) est installée, exécutez la commande suivante :Bashdatabricks --versionSi Databricks CLI version 0.17 est renvoyée, la version héritée de Databricks CLI est installée.
-
Si vous n'avez pas configuré la CLI Databricks héritée (CLI Databricks version 0.17) avec l'authentification, vous devez le faire maintenant. Pour confirmer que l'authentification est configurée, exécutez la commande de base suivante afin d'obtenir des informations récapitulatives sur votre workspace Databricks. Assurez-vous d'inclure la barre oblique (
/) après la sous-commandels:Bashdatabricks workspace ls /Si une liste de noms de dossiers de niveau racine pour votre Workspace est renvoyée, l'authentification est configurée.
-
Installez les packages Python dont dépend cet exemple de code. Pour ce faire, exécutez la commande suivante à partir du dossier
ide-demo/ide-best-practices:Bashpip install -r unit-requirements.txt -
Confirmez que les packages dépendants de l'exemple de code sont installés. Pour ce faire, exécutez la commande suivante :
Bashpip listSi les packages qui figurent dans les fichiers
requirements.txtetunit-requirements.txtse trouvent quelque part dans cette liste, les packages dépendants sont installés.
Les fichiers listés dans requirements.txt sont destinés à des versions de package spécifiques. Pour une meilleure compatibilité, vous pouvez croiser ces versions avec le type de nœud de cluster que vous souhaitez que votre Workspace Databricks utilise ultérieurement pour exécuter des déploiements. Consultez la section « Environnement système » pour connaître la version de Databricks Runtime de votre cluster dans Databricks Runtime : notes de publication, versions et compatibilité.
Étape 4 : Personnalisez l'exemple de code pour votre Workspace Databricks.
-
Personnalisez les paramètres de projet
dbxdu dépôt. Pour ce faire, dans le fichier.dbx/project.json, remplacez la valeur de l'objetprofiledeDEFAULTpar le nom du profil qui correspond à celui que vous avez configuré pour l'authentification avec l'ancienne CLI Databricks (CLI Databricks version 0.17). Si vous n'avez pas configuré de profil non-default, laissezDEFAULTtel quel. Par exemple :JSON{
"environments": {
"default": {
"profile": "DEFAULT",
"storage_type": "mlflow",
"properties": {
"workspace_directory": "/Workspace/Shared/dbx/covid_analysis",
"artifact_location": "dbfs:/Shared/dbx/projects/covid_analysis"
}
}
},
"inplace_jinja_support": false
} -
Personnalisez les paramètres de déploiement du projet
dbx. Pour ce faire, dans le fichierconf/deployment.yml, modifiez la valeur des objetsspark_versionetnode_type_idde10.4.x-scala2.12etm6gd.largeà la chaîne de version du runtime et au type de nœud de cluster Databricks que vous souhaitez que votre Workspace Databricks utilise pour l'exécution des déploiements.Par exemple, pour spécifier Databricks Runtime 10.4 LTS et un type de nœud
i3.xlarge:YAMLenvironments:
default:
workflows:
- name: 'covid_analysis_etl_integ'
new_cluster:
spark_version: '10.4.x-scala2.12'
num_workers: 1
node_type_id: 'i3.xlarge'
spark_python_task:
python_file: 'file://jobs/covid_trends_job.py'
- name: 'covid_analysis_etl_prod'
new_cluster:
spark_version: '10.4.x-scala2.12'
num_workers: 1
node_type_id: 'i3.xlarge'
spark_python_task:
python_file: 'file://jobs/covid_trends_job.py'
parameters: ['--prod']
- name: 'covid_analysis_etl_raw'
new_cluster:
spark_version: '10.4.x-scala2.12'
num_workers: 1
node_type_id: 'i3.xlarge'
spark_python_task:
python_file: 'file://jobs/covid_trends_job_raw.py'
Dans cet exemple, chacune de ces trois définitions de job a la même valeur spark_version et node_type_id. Vous pouvez utiliser différentes valeurs pour différentes définitions de Job. Vous pouvez également créer des valeurs partagées et les réutiliser dans différentes définitions de job, afin de réduire les erreurs de saisie et la maintenance du code. Consultez l'exemple YAML dans la documentation dbx.
Explorer l'exemple de code
Après avoir configuré l'exemple de code, utilisez les informations suivantes pour découvrir comment fonctionnent les différents fichiers du dossier ide-demo/ide-best-practices.
Modularisation du code
Code non modularisé
Le fichier jobs/covid_trends_job_raw.py est une version non modularisée de la logique de code. Vous pouvez exécuter ce fichier seul.
Code modularisé
Le fichier jobs/covid_trends_job.py est une version modularisée de la logique de code. Ce fichier s'appuie sur le code partagé du fichier covid_analysis/transforms.py. Le fichier covid_analysis/__init__.py traite le dossier covide_analysis comme un package conteneur.
Test
Tests unitaires
Le fichier tests/testdata.csv contient une petite partie des données du fichier covid-hospitalizations.csv à des fins de test. Le fichier tests/transforms_test.py contient les tests unitaires pour le fichier covid_analysis/transforms.py.
Programme d'exécution des tests unitaires
Le fichier pytest.ini contient des options de configuration pour l'exécution des tests avec pytest. Consultez pytest.ini et Options de configuration dans la documentation pytest.
Le fichier .coveragerc contient des options de configuration pour les mesures de couverture du code Python avec coverage.py. Consultez la référence de configuration dans la documentation coverage.py.
Le fichier requirements.txt, qui est un sous-ensemble du fichier unit-requirements.txt que vous avez exécuté précédemment avec pip, contient une liste de packages dont dépendent également les tests unitaires.
Packaging
Le fichier setup.py fournit des commandes à exécuter dans la console (scripts de console), telles que la commande pip, pour empaqueter les projets Python avec setuptools. Voir les points d'entrée dans la documentation de setuptools.
Autres fichiers
Il existe d'autres fichiers dans cet exemple de code qui n'ont pas été décrits précédemment :
- Le dossier
.github/workflowscontient trois fichiers,databricks_pull_request_tests.yml,onpush.ymletonrelease.yaml, qui représentent les GitHub Actions, abordées plus loin dans la section GitHub Actions. - Le fichier
.gitignorecontient une liste de dossiers et de fichiers locaux que Git ignore pour votre dépôt.
Exécutez l’exemple de code
Vous pouvez utiliser dbx sur votre machine locale pour indiquer à Databricks d'exécuter l'exemple de code dans votre Workspace distant à la demande, comme décrit dans la sous-section suivante. Ou vous pouvez utiliser GitHub Actions pour que GitHub exécute l'exemple de code chaque fois que vous poussez des modifications de code vers votre dépôt GitHub.
Exécuter avec dbx
-
Installez le contenu du dossier
covid_analysisen tant que package en Pythonsetuptoolsen mode développement en exécutant la commande suivante à partir de la racine de votre projetdbx(par exemple, le dossieride-demo/ide-best-practices). Veillez à inclure le point (.) à la fin de cette commande :Bashpip install -e .Cette commande crée un dossier
covid_analysis.egg-info, qui contient des informations sur la version compilée des fichierscovid_analysis/__init__.pyetcovid_analysis/transforms.py. -
Exécutez les tests en exécutant la commande suivante :
Bashpytest tests/Les résultats des tests s’affichent dans le terminal. Les quatre tests devraient s'afficher comme réussis.
Pour des approches supplémentaires en matière de tests, y compris les tests pour les Notebooks R et Scala, consultez Tests unitaires pour les Notebooks Databricks.
-
Obtenez, en option, les métriques de couverture pour vos tests en exécutant la commande suivante :
Bashcoverage run -m pytest tests/
Si un message indique que coverage est introuvable, exécutez pip install coverage et réessayez.
Pour afficher les résultats de la couverture de test, exécutez la commande suivante :
coverage report -m
-
Si les quatre tests réussissent, envoyez le contenu du projet
dbxà votre Workspace Databricks, en exécutant la commande suivante :Bashdbx deploy --environment=defaultLes informations sur le projet et ses exécutions sont envoyées à l'emplacement spécifié dans l'objet
workspace_directorydu fichier.dbx/project.json.Le contenu du projet est envoyé à l'emplacement spécifié dans l'objet
artifact_locationdans le fichier.dbx/project.json. -
Exécutez la version de préproduction du code dans votre Workspace, en exécutant la commande suivante :
Bashdbx launch covid_analysis_etl_integUn Link vers les résultats de l'exécution s'affiche dans le terminal. Cela devrait ressembler à ceci :
Bashhttps://<your-workspace-instance-id>/?o=1234567890123456#job/123456789012345/run/12345Suivez ce Link dans votre navigateur web pour consulter les résultats de l'exécution dans votre Workspace.
-
Exécutez la version de production du code dans votre Workspace, en exécutant la commande suivante :
Bashdbx launch covid_analysis_etl_prodUn Link vers les résultats de l'exécution s'affiche dans le terminal. Cela devrait ressembler à ceci :
Bashhttps://<your-workspace-instance-id>/?o=1234567890123456#job/123456789012345/run/23456Suivez ce Link dans votre navigateur web pour consulter les résultats de l'exécution dans votre Workspace.
Exécuter avec GitHub Actions
Dans le dossier .github/workflows du projet, les fichiers GitHub Actions onpush.yml et onrelease.yml effectuent les opérations suivantes :
- À chaque envoi (push) vers une étiquette qui commence par
v, utilisedbxpour déployer le jobcovid_analysis_etl_prod. - Sur chaque push qui n'est pas vers une balise commençant par
v:- Utilise
pytestpour exécuter les tests unitaires. - Utilise
dbxpour déployer le fichier spécifié dans le Jobcovid_analysis_etl_integvers le Workspace distant. - Utilise
dbxpour lancer le fichier déjà déployé spécifié dans le jobcovid_analysis_etl_integsur le workspace distant, en traçant cette exécution jusqu'à ce qu'elle se termine.
- Utilise
Un fichier GitHub Actions supplémentaire, databricks_pull_request_tests.yml, vous est fourni en tant que template pour l'expérimentation, sans impacter les fichiers GitHub Actions onpush.yml et onrelease.yml. Vous pouvez exécuter cet exemple de code sans le fichier databricks_pull_request_tests.yml GitHub Actions. Son utilisation n'est pas couverte dans cet article.
Les sous-sections suivantes décrivent comment configurer et exécuter les fichiers onpush.yml et onrelease.yml de GitHub Actions.
Configurer pour utiliser GitHub Actions
Configurez votre Workspace Databricks en suivant les instructions de la section Service Principals for CI/CD. Cela inclut les actions suivantes :
- Créer un Service Principal Databricks.
- Créez un jeton d'accès Databricks pour le Service Principal Databricks.
En tant que bonne pratique de sécurité, Databricks vous recommande d'utiliser un jeton d'accès Databricks pour un Service Principal Databricks, au lieu du jeton d'accès personnel Databricks pour votre utilisateur de Workspace, afin de permettre à GitHub de s'authentifier auprès de votre Workspace Databricks.
Après avoir créé le service principal Databricks et son jeton d'accès Databricks, arrêtez-vous et notez la valeur du jeton d'accès Databricks, que vous utiliserez dans la section suivante.
Exécuter GitHub Actions
Étape 1 : Publier votre repo cloné
- Dans Visual Studio Code, dans la barre latérale, cliquez sur l'icône GitHub . Si l'icône n'est pas visible, activez d'abord l'extension GitHub Pull Requests and Issues via la vue Extensions ( Affichage > Extensions ).
- Si le bouton **Se connecter** est visible, cliquez dessus et suivez les instructions à l'écran pour vous connecter à votre compte GitHub.
- Dans la barre de menus, cliquez sur Affichage > Palette de commandes , saisissez
Publish to GitHub, puis cliquez sur Publier sur GitHub . - Sélectionnez une option pour publier votre référentiel cloné sur votre compte GitHub.
Étape 2 : Ajoutez des secrets chiffrés à votre dépôt
Dans le site web GitHub de votre repository publié, suivez les instructions de Création de secrets chiffrés pour un repository, pour les secrets chiffrés suivants :
- Créez un secret chiffré nommé
DATABRICKS_HOST, défini sur la valeur de l'URL de votre instance de Workspace, par exemplehttps://dbc-a1b2345c-d6e7.cloud.databricks.com. - Créez un secret chiffré nommé
DATABRICKS_TOKEN, défini sur la valeur du jeton d'accès Databricks pour le service principal Databricks.
Étape 3 : Créer et publier une Branch vers votre repo
- Dans Visual Studio Code, dans la vue Contrôle de code source ( Affichage > Contrôle de code source ), cliquez sur l'icône ... ( Vues et plus d'actions ).
- Cliquez sur **Branch > Créer une Branch à partir de**.
- Saisissez un nom pour la Branch, par exemple
my-branch. - Sélectionnez la branch à partir de laquelle créer la branch, par exemple main .
- Apportez une légère modification à l'un des fichiers de votre dépôt local, puis enregistrez le fichier. Par exemple, apportez une modification mineure à un commentaire de code dans le fichier
tests/transforms_test.py. - Dans la vue Contrôle de la source , cliquez à nouveau sur l'icône … ( Vues et autres actions ).
- Cliquez sur Modifications > Préparer toutes les modifications .
- Cliquez à nouveau sur l’icône **…** (**Vues et plus d’actions**).
- Cliquez sur Commit > Commit Staged .
- Saisissez un message pour le commit.
- Cliquez à nouveau sur l’icône **…** (**Vues et plus d’actions**).
- Cliquez sur **Branch > Publier la branche**.
Étape 4 : Créez une requête d'extraction et Merge
- Accédez au site web GitHub pour votre référentiel publié,
https://github/<your-GitHub-username>/ide-best-practices. - Dans la **tab Pull requests**, à côté de **my-branch a eu des poussées récentes**, cliquez sur **Comparer et requête de tirage**.
- Cliquez sur **Créer une requête Pull**.
- Sur la page de la requête de tirage, attendez que l'icône à côté de CI pipleline / ci-pipeline (push) affiche une coche verte. (Cela peut prendre plusieurs minutes avant que l'icône n'apparaisse.) S'il y a une croix rouge au lieu d'une coche verte, cliquez sur Détails pour en connaître la raison. Si l'icône ou les **Détails** ne s'affichent plus, cliquez sur **Afficher toutes les vérifications**.
- Si la coche verte apparaît, Merge la pull request dans la
mainBranch en cliquant sur Merge pull request .