Använda dbx med Visual Studio Code
Viktigt!
Den här dokumentationen har dragits tillbaka och kanske inte uppdateras.
Databricks rekommenderar att du använder Databricks-tillgångspaket i stället för dbx
av Databricks Labs. Se Vad är Databricks-tillgångspaket? och Migrera från dbx till paket.
Information om hur du använder Azure Databricks med Visual Studio Code finns i artikeln Databricks-tillägget för Visual Studio Code.
Den här artikeln beskriver ett Python-baserat kodexempel som du kan arbeta med i valfri Python-kompatibel IDE. Mer specifikt beskriver den här artikeln hur du arbetar med det här kodexemplet i Visual Studio Code, som innehåller följande produktivitetsfunktioner för utvecklare:
- Kod har slutförts
- Lintning
- Test
- Felsöka kodobjekt som inte kräver en realtidsanslutning till fjärranslutna Azure Databricks-resurser.
Den här artikeln använder dbx by Databricks Labs tillsammans med Visual Studio Code för att skicka kodexemplet till en fjärransluten Azure Databricks-arbetsyta.
dbx
instruerar Azure Databricks att Översikt över orkestrering på Databricks att köra den skickade koden på ett Azure Databricks-jobbkluster på den arbetsytan.
Du kan använda populära Git-leverantörer från tredje part för versionskontroll och kontinuerlig integrering och kontinuerlig leverans eller kontinuerlig distribution (CI/CD) av koden. För versionskontroll omfattar dessa Git-leverantörer följande:
- GitHub
- Bitbucket
- GitLab
- Azure DevOps (inte tillgängligt i Azure Kina-regioner)
- AWS CodeCommit
- GitHub AE
För CI/CD dbx
stöder följande CI/CD-plattformar:
För att visa hur versionskontroll och CI/CD kan fungera beskriver den här artikeln hur du använder Visual Studio Code, dbx
och det här kodexemplet, tillsammans med GitHub och GitHub Actions.
Krav för kodexempel
Om du vill använda det här kodexemplet måste du ha följande:
- En Azure Databricks-arbetsyta i ditt Azure Databricks-konto.
- Ett GitHub-konto. Skapa ett GitHub-konto om du inte redan har ett.
På din lokala utvecklingsdator måste du dessutom ha följande:
Python version 3.8 eller senare.
Du bör använda en version av Python som matchar den som är installerad på dina målkluster. Om du vill hämta den version av Python som är installerad i ett befintligt kluster kan du använda klustrets webbterminal för att köra
python --version
kommandot. Se även avsnittet "Systemmiljö" i versionsanteckningarna för Databricks Runtime och kompatibilitet för Databricks Runtime-versionen för dina målkluster. I vilket fall som helst måste versionen av Python vara 3.8 eller senare.Om du vill hämta den version av Python som för närvarande refereras till på den lokala datorn kör
python --version
du från den lokala terminalen. (Beroende på hur du konfigurerar Python på din lokala dator kan du behöva körapython3
i stället förpython
i den här artikeln.) Se även Välj en Python-tolk.pip.
pip
installeras automatiskt med nyare versioner av Python. Om du vill kontrollera ompip
det redan är installerat kör dupip --version
från den lokala terminalen. (Beroende på hur du konfigurerar Python ellerpip
på din lokala dator kan du behöva körapip3
i stället förpip
i den här artikeln.)dbx version 0.8.0 eller senare. Du kan installera
dbx
paketet från Python Package Index (PyPI) genom att körapip install dbx
.En metod för att skapa virtuella Python-miljöer för att säkerställa att du använder rätt versioner av Python och paketberoenden i dina
dbx
projekt. Den här artikeln beskriver pipenv.Databricks CLI version 0.18 eller senare, konfigurerad med autentisering.
GitHub Pull Requests and Issues-tillägget för Visual Studio Code.
Git.
Om kodexemplet
Python-kodexemplet för den här artikeln, som finns i lagringsplatsen databricks/ide-best-practices i GitHub, gör följande:
- Hämtar data från lagringsplatsen owid/covid-19-data i GitHub.
- Filtrerar data för en specifik ISO-landskod.
- Skapar en pivottabell från data.
- Utför datarensning på data.
- Modulariserar kodlogik till återanvändbara funktioner.
- Enheten testar funktionerna.
- Tillhandahåller
dbx
projektkonfigurationer och inställningar för att aktivera koden för att skriva data till en Delta-tabell på en fjärransluten Azure Databricks-arbetsyta.
Konfigurera kodexemplet
När du har kraven för det här kodexemplet slutför du följande steg för att börja använda kodexemplet.
Kommentar
De här stegen omfattar inte att konfigurera det här kodexemplet för CI/CD. Du behöver inte konfigurera CI/CD för att köra det här kodexemplet. Om du vill konfigurera CI/CD senare kan du läsa Kör med GitHub Actions.
Steg 1: Skapa en virtuell Python-miljö
Från terminalen skapar du en tom mapp som ska innehålla en virtuell miljö för det här kodexemplet. De här anvisningarna använder en överordnad mapp med namnet
ide-demo
. Du kan ge den här mappen valfritt namn. Om du använder ett annat namn ersätter du namnet i den här artikeln. När du har skapat mappen växlar du till den och startar sedan Visual Studio Code från den mappen. Se till att inkludera punkten (.
) eftercode
kommandot.För Linux och macOS:
mkdir ide-demo cd ide-demo code .
Dricks
Om du får felet
command not found: code
läser du Starta från kommandoraden på Microsofts webbplats.För Windows:
md ide-demo cd ide-demo code .
I Visual Studio Code går du till menyraden och klickar på Visa > terminal.
Från mappens
ide-demo
rot körpipenv
du kommandot med följande alternativ, där<version>
är målversionen av Python som du redan har installerat lokalt (och helst en version som matchar dina målklusters version av Python), till exempel3.8.14
.pipenv --python <version>
Anteckna värdet
Virtualenv location
i kommandotspipenv
utdata, eftersom du behöver det i nästa steg.Välj Python-måltolkaren och aktivera sedan den virtuella Python-miljön:
På menyraden klickar du på Visa > kommandopalett, skriver
Python: Select
och klickar sedan på Python: Välj tolk.Välj Python-tolken i sökvägen till den virtuella Python-miljö som du nyss skapade. (Den här sökvägen visas som
Virtualenv location
värdet i kommandotspipenv
utdata.)På menyraden klickar du på Visa > kommandopalett, skriver
Terminal: Create
och klickar sedan på Terminal: Skapa ny terminal.Kontrollera att kommandotolken anger att du är i
pipenv
gränssnittet. För att bekräfta bör du se något som liknar(<your-username>)
före kommandotolken. Om du inte ser det kör du följande kommando:pipenv shell
Om du vill avsluta
pipenv
gränssnittet kör du kommandotexit
och parenteserna försvinner.
Mer information finns i Använda Python-miljöer i VS Code i Visual Studio Code-dokumentationen.
Steg 2: Klona kodexemplet från GitHub
- Öppna mappen (
ide-demo
>) i Visual Studio Code om den inte redan är öppen. - Klicka på Visa > kommandopalett, skriv
Git: Clone
och klicka sedan på Git: Klona. - Ange en lagringsplatskälla för Ange lagringsplats-URL eller välj en lagringsplatskälla
https://github.com/databricks/ide-best-practices
- Bläddra till mappen
ide-demo
och klicka på Välj lagringsplats.
Steg 3: Installera kodexemplets beroenden
Installera en version av
dbx
och Databricks CLI version 0.18 eller senare som är kompatibel med din version av Python. För att göra detta kör du följande kommando i Visual Studio Code från terminalen från dinide-demo
mapp med ettpipenv
gränssnitt aktiverat (pipenv shell
):pip install dbx
Bekräfta att är
dbx
installerat. Gör detta genom att köra följande kommando:dbx --version
Om versionsnumret returneras
dbx
installeras.Om versionsnumret är lägre än 0.8.0 uppgraderar
dbx
du genom att köra följande kommando och kontrollerar sedan versionsnumret igen:pip install dbx --upgrade dbx --version # Or ... python -m pip install dbx --upgrade dbx --version
När du installerar
dbx
installeras även äldre Databricks CLI (Databricks CLI version 0.17) automatiskt. Kontrollera att det äldre Databricks CLI (Databricks CLI version 0.17) är installerat genom att köra följande kommando:databricks --version
Om Databricks CLI version 0.17 returneras installeras det äldre Databricks CLI.
Om du inte har konfigurerat äldre Databricks CLI (Databricks CLI version 0.17) med autentisering måste du göra det nu. Bekräfta att autentiseringen har konfigurerats genom att köra följande grundläggande kommando för att hämta sammanfattningsinformation om din Azure Databricks-arbetsyta. Se till att inkludera snedstrecket (
/
) efterls
underkommandot:databricks workspace ls /
Om en lista över mappnamn på rotnivå för arbetsytan returneras konfigureras autentisering.
Installera De Python-paket som det här kodexemplet är beroende av. Det gör du genom att köra följande kommando från
ide-demo/ide-best-practices
mappen:pip install -r unit-requirements.txt
Bekräfta att kodexemplets beroende paket är installerade. Gör detta genom att köra följande kommando:
pip list
Om de paket som visas i
requirements.txt
filerna ochunit-requirements.txt
finns någonstans i den här listan installeras de beroende paketen.Kommentar
Filerna som anges i
requirements.txt
är för specifika paketversioner. För bättre kompatibilitet kan du korsreferensera dessa versioner med den klusternodtyp som du vill att din Azure Databricks-arbetsyta ska använda för att köra distributioner senare. Se avsnittet "Systemmiljö" för ditt klusters Databricks Runtime-version i Databricks Runtime versionsanteckningar och kompatibilitet.
Steg 4: Anpassa kodexemplet för din Azure Databricks-arbetsyta
Anpassa lagringsplatsens
dbx
projektinställningar. För att göra detta ändrar du värdet.dbx/project.json
för objektet frånprofile
DEFAULT
till namnet på profilen som matchar det som du har konfigurerat för autentisering med äldre Databricks CLI (Databricks CLI version 0.17). Om du inte har konfigurerat någon profil som inte är standard lämnarDEFAULT
du som den är. Till exempel:{ "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 }
dbx
Anpassa projektets distributionsinställningar. För att göra detta iconf/deployment.yml
filen ändrar du värdet för objektenspark_version
ochnode_type_id
från10.4.x-scala2.12
ochm6gd.large
till versionssträngen för Azure Databricks-körningen och klusternodtypen som du vill att din Azure Databricks-arbetsyta ska använda för att köra distributioner på.Om du till exempel vill ange Databricks Runtime 10.4 LTS och en
Standard_DS3_v2
nodtyp:environments: default: workflows: - name: 'covid_analysis_etl_integ' new_cluster: spark_version: '10.4.x-scala2.12' num_workers: 1 node_type_id: 'Standard_DS3_v2' 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: 'Standard_DS3_v2' 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: 'Standard_DS3_v2' spark_python_task: python_file: 'file://jobs/covid_trends_job_raw.py'
Dricks
I det här exemplet har var och en av dessa tre jobbdefinitioner samma spark_version
och node_type_id
värde. Du kan använda olika värden för olika jobbdefinitioner. Du kan också skapa delade värden och återanvända dem mellan jobbdefinitioner för att minska skrivfel och kodunderhåll. Se YAML-exemplet i dokumentationendbx
.
Utforska kodexemplet
När du har konfigurerat kodexemplet använder du följande information för att lära dig hur de olika filerna i ide-demo/ide-best-practices
mappen fungerar.
Kod modularisering
Omodulerad kod
Filen jobs/covid_trends_job_raw.py
är en omodulerad version av kodlogik. Du kan köra den här filen på egen hand.
Modulariserad kod
Filen jobs/covid_trends_job.py
är en modulariserad version av kodlogik. Den här filen förlitar sig på den delade koden i covid_analysis/transforms.py
filen. Filen covid_analysis/__init__.py
behandlar covide_analysis
mappen som ett innehållande paket.
Testning
Enhetstest
Filen tests/testdata.csv
innehåller en liten del av data i covid-hospitalizations.csv
filen i testsyfte. Filen tests/transforms_test.py
innehåller enhetstesterna covid_analysis/transforms.py
för filen.
Enhetstestkörare
Filen pytest.ini
innehåller konfigurationsalternativ för att köra tester med pytest. Se pytest.ini och konfigurationsalternativ i dokumentationen pytest
.
Filen .coveragerc
innehåller konfigurationsalternativ för Python-kodtäckningsmätningar med coverage.py. Se Konfigurationsreferens i dokumentationen coverage.py
.
Filen requirements.txt
, som är en delmängd av unit-requirements.txt
filen som du körde tidigare med pip
, innehåller en lista över paket som enhetstesterna också är beroende av.
Paketering
Filen setup.py
innehåller kommandon som ska köras i konsolen (konsolskript), till exempel pip
kommandot, för att paketera Python-projekt med setuptools. Se Startpunkter i dokumentationen setuptools
.
Andra filer
Det finns andra filer i det här kodexemplet som inte har beskrivits tidigare:
- Mappen
.github/workflows
innehåller tre filer,databricks_pull_request_tests.yml
,onpush.yml
ochonrelease.yaml
, som representerar GitHub Actions, som beskrivs senare i avsnittet GitHub Actions . - Filen
.gitignore
innehåller en lista över lokala mappar och filer som Git ignorerar för lagringsplatsen.
Kör kodexemplet
Du kan använda dbx
på din lokala dator för att instruera Azure Databricks att köra kodexemplet på fjärrarbetsytan på begäran, enligt beskrivningen i nästa underavsnitt. Eller så kan du använda GitHub Actions för att låta GitHub köra kodexemplet varje gång du skickar kodändringar till din GitHub-lagringsplats.
Kör med dbx
Installera innehållet i
covid_analysis
mappen som ett paket i Python-utvecklingslägesetuptools
genom att köra följande kommando från roten i projektetdbx
(till exempelide-demo/ide-best-practices
mappen). Se till att inkludera punkten (.
) i slutet av det här kommandot:pip install -e .
Det här kommandot skapar en
covid_analysis.egg-info
mapp som innehåller information om den kompilerade versionen avcovid_analysis/__init__.py
filerna ochcovid_analysis/transforms.py
.Kör testerna genom att köra följande kommando:
pytest tests/
Testresultaten visas i terminalen. Alla fyra testerna bör visas som övergående.
Dricks
Ytterligare metoder för testning, inklusive testning för R- och Scala-notebook-filer, finns i Enhetstestning för notebook-filer.
Du kan också hämta testtäckningsmått för dina tester genom att köra följande kommando:
coverage run -m pytest tests/
Kommentar
Om ett meddelande visas som
coverage
inte kan hittas kör dupip install coverage
och försöker igen.Om du vill visa testtäckningsresultat kör du följande kommando:
coverage report -m
Om alla fyra testerna godkänns skickar
dbx
du projektets innehåll till din Azure Databricks-arbetsyta genom att köra följande kommando:dbx deploy --environment=default
Information om projektet och dess körningar skickas till den plats som anges i
workspace_directory
objektet i.dbx/project.json
filen.Projektets innehåll skickas till den plats som anges i
artifact_location
objektet i.dbx/project.json
filen.Kör förproduktionsversionen av koden på arbetsytan genom att köra följande kommando:
dbx launch covid_analysis_etl_integ
En länk till körningens resultat visas i terminalen. Den bör se ut ungefär så här:
https://<your-workspace-instance-id>/?o=1234567890123456#job/123456789012345/run/12345
Följ den här länken i webbläsaren för att se körningens resultat på din arbetsyta.
Kör produktionsversionen av koden på din arbetsyta genom att köra följande kommando:
dbx launch covid_analysis_etl_prod
En länk till körningens resultat visas i terminalen. Den bör se ut ungefär så här:
https://<your-workspace-instance-id>/?o=1234567890123456#job/123456789012345/run/23456
Följ den här länken i webbläsaren för att se körningens resultat på din arbetsyta.
Köra med GitHub Actions
I projektets .github/workflows
mapp onpush.yml
gör GitHub Actions-filerna och onrelease.yml
följande:
- På varje push-överföring till en tagg som börjar med
v
använderdbx
du för att distribueracovid_analysis_etl_prod
jobbet. - På varje push-överföring som inte är till en tagg som börjar med
v
:- Använder
pytest
för att köra enhetstesterna. - Använder
dbx
för att distribuera filen som anges icovid_analysis_etl_integ
jobbet till fjärrarbetsytan. - Använder
dbx
för att starta den redan distribuerade filen som anges icovid_analysis_etl_integ
jobbet på fjärrarbetsytan och spåra den här körningen tills den är klar.
- Använder
Kommentar
En ytterligare GitHub Actions-fil, databricks_pull_request_tests.yml
, tillhandahålls som en mall att experimentera med, utan att onpush.yml
påverka Filerna och onrelease.yml
GitHub Actions. Du kan köra det här kodexemplet utan databricks_pull_request_tests.yml
GitHub Actions-filen. Dess användning beskrivs inte i den här artikeln.
Följande underavsnitt beskriver hur du konfigurerar och kör onpush.yml
GitHub Actions-filerna och onrelease.yml
.
Konfigurera för att använda GitHub Actions
Konfigurera din Azure Databricks-arbetsyta genom att följa anvisningarna i Tjänstens huvudnamn för CI/CD. Detta omfattar följande åtgärder:
- Skapa ett huvudnamn för tjänsten.
- Skapa en Microsoft Entra-ID-token för tjänstens huvudnamn.
Som bästa säkerhet rekommenderar Databricks att du använder en Microsoft Entra-ID-token för tjänstens huvudnamn, i stället för databricks personliga åtkomsttoken för din arbetsyteanvändare, för att göra det möjligt för GitHub att autentisera med din Azure Databricks-arbetsyta.
När du har skapat tjänstens huvudnamn och dess Microsoft Entra-ID-token stoppar du och antecknar tokenvärdet För Microsoft Entra-ID som du ska använda i nästa avsnitt.
Kör GitHub Actions
Steg 1: Publicera din klonade lagringsplats
- Klicka på GitHub-ikonen i sidofältet i Visual Studio Code. Om ikonen inte visas aktiverar du tillägget GitHub Pull Requests and Issues (GitHub Pull Requests and Issues) via tilläggsvyn (Visa > tillägg) först.
- Om knappen Logga in visas klickar du på den och följer anvisningarna på skärmen för att logga in på ditt GitHub-konto.
- På menyraden klickar du på Visa > kommandopalett, skriver
Publish to GitHub
och klickar sedan på Publicera på GitHub. - Välj ett alternativ för att publicera din klonade lagringsplats till ditt GitHub-konto.
Steg 2: Lägga till krypterade hemligheter i lagringsplatsen
På GitHub-webbplatsen för din publicerade lagringsplats följer du anvisningarna i Skapa krypterade hemligheter för en lagringsplats för följande krypterade hemligheter:
- Skapa en krypterad hemlighet med namnet
DATABRICKS_HOST
, inställt på värdet för url:en per arbetsyta, till exempelhttps://adb-1234567890123456.7.azuredatabricks.net
. - Skapa en krypterad hemlighet med namnet
DATABRICKS_TOKEN
, inställt på värdet för Microsoft Entra ID-token för tjänstens huvudnamn.
Steg 3: Skapa och publicera en gren till lagringsplatsen
- I Visual Studio Code i vyn Källkontroll (Visa > källkontroll) klickar du på ikonen ... (Vyer och fler åtgärder).
- Klicka på Gren > Skapa gren från.
- Ange ett namn för grenen, till exempel
my-branch
. - Välj grenen för att skapa grenen från, till exempel main.
- Gör en mindre ändring i en av filerna på din lokala lagringsplats och spara sedan filen. Du kan till exempel göra en mindre ändring i en kodkommentare i
tests/transforms_test.py
filen. - I vyn Källkontroll klickar du på ikonen ... (Vyer och fler åtgärder) igen.
- Klicka på Ändringar > Mellanlagra alla ändringar.
- Klicka på ikonen ... (Vyer och fler åtgärder) igen.
- Klicka på Checka in > mellanlagrad incheckning.
- Ange ett meddelande för incheckningen.
- Klicka på ikonen ... (Vyer och fler åtgärder) igen.
- Klicka på Grenpubliceringsgren>.
Steg 4: Skapa en pull-begäran och slå samman
- Gå till GitHub-webbplatsen för din publicerade lagringsplats,
https://github/<your-GitHub-username>/ide-best-practices
. - På fliken Pull-begäranden bredvid my-branchen har de senaste push-meddelandena klickar du på Jämför och pull-begäran.
- Klicka på Skapa pull-begäran.
- På sidan pull-begäran väntar du på att ikonen bredvid CI-pipleline/ci-pipeline (push) ska visa en grön bockmarkering. (Det kan ta några minuter innan ikonen visas.) Om det finns ett rött X i stället för en grön bockmarkering klickar du på Information för att ta reda på varför. Om ikonen eller Informationen inte längre visas klickar du på Visa alla kontroller.
- Om den gröna bockmarkeringen visas sammanfogar du pull-begäran till grenen
main
genom att klicka på Koppla pull-begäran.