Delen via


Databricks SDK voor Python

Notitie

Databricks raadt Databricks Asset Bundles aan voor het maken, ontwikkelen, implementeren en testen van taken en andere Databricks-resources als broncode. Bekijk wat zijn Databricks Asset Bundles?.

In dit artikel leert u hoe u Azure Databricks-bewerkingen automatiseert en de ontwikkeling versnelt met de Databricks SDK voor Python. Dit artikel is een aanvulling op de Databricks SDK voor Python-documentatie over De Docs en de codevoorbeelden in de Databricks SDK voor Python-opslagplaats in GitHub.

Notitie

De Databricks SDK voor Python is bèta en mag niet worden gebruikt in productie.

Tijdens de bètaperiode raadt Databricks u aan een afhankelijkheid vast te maken van de specifieke secundaire versie van de Databricks SDK voor Python waarvan uw code afhankelijk is. U kunt bijvoorbeeld afhankelijkheden vastmaken in bestanden zoals requirements.txt voor venv, of pyproject.toml voor poetry.lock Poëzie. Zie Virtual Environments and Packages for , or Installing dependencies for Poetry (Afhankelijkheden voor poëzie installeren) voor venvmeer informatie over het vastmaken van afhankelijkheden.

Voordat u begint

U kunt de Databricks SDK voor Python gebruiken vanuit een Azure Databricks-notebook of vanaf uw lokale ontwikkelcomputer.

Voordat u begint met het gebruik van de Databricks SDK voor Python, moet uw ontwikkelcomputer over het volgende beschikken:

  • Azure Databricks-verificatie geconfigureerd.
  • Python 3.8 of hoger geïnstalleerd. Voor het automatiseren van Azure Databricks-rekenresources raadt Databricks aan dat u de primaire en secundaire versies van Python hebt geïnstalleerd die overeenkomen met de versie die is geïnstalleerd op uw Azure Databricks-rekenresource. De voorbeelden van dit artikel zijn afhankelijk van het automatiseren van clusters met Databricks Runtime 13.3 LTS, waarop Python 3.10 is geïnstalleerd. Zie de releaseversies van Databricks Runtime en compatibiliteit voor de Databricks Runtime-versie van uw cluster voor de juiste versie.
  • Databricks raadt u aan een virtuele Python-omgeving te maken en te activeren voor elk Python-project dat u gebruikt met de Databricks SDK voor Python. Virtuele Python-omgevingen helpen ervoor te zorgen dat uw codeproject compatibele versies van Python- en Python-pakketten gebruikt (in dit geval de Databricks SDK voor Python-pakket). Zie venv of Poëzie voor meer informatie over virtuele Python-omgevingen.

Aan de slag met de Databricks SDK voor Python

In deze sectie wordt beschreven hoe u aan de slag gaat met de Databricks SDK voor Python vanaf uw lokale ontwikkelcomputer. Als u de Databricks SDK voor Python wilt gebruiken vanuit een Azure Databricks-notebook, gaat u verder met de Databricks SDK voor Python vanuit een Azure Databricks-notebook.

  1. Installeer op uw ontwikkelcomputer waarvoor Azure Databricks-verificatie is geconfigureerd, Python al is geïnstalleerd en uw virtuele Python-omgeving al is geactiveerd het databricks-sdk-pakket (en de bijbehorende afhankelijkheden) van de Python Package Index (PyPI), als volgt:

    Venv

    Gebruik pip dit om het databricks-sdk pakket te installeren. (Op sommige systemen moet u mogelijk hier en overal vervangen door pip3 pip.)

    pip3 install databricks-sdk
    

    Poëzie

    poetry add databricks-sdk
    

    Zie de releasegeschiedenis van het pakket om een specifieke versie van het databricks-sdk pakket te installeren terwijl de Databricks SDK voor Python zich in de bètaversie bevindt. Als u bijvoorbeeld versie 0.1.6wilt installeren:

    Venv

    pip3 install databricks-sdk==0.1.6
    

    Poëzie

    poetry add databricks-sdk==0.1.6
    

    Als u een bestaande installatie van het Databricks SDK-pakket voor Python wilt upgraden naar de nieuwste versie, voert u de volgende opdracht uit:

    Venv

    pip3 install --upgrade databricks-sdk
    

    Poëzie

    poetry add databricks-sdk@latest
    

    Voer de volgende opdracht uit om de Databricks SDK voor de huidige Version en andere details van het Python-pakket weer te geven:

    Venv

    pip3 show databricks-sdk
    

    Poëzie

    poetry show databricks-sdk
    
  2. Maak in uw virtuele Python-omgeving een Python-codebestand waarmee de Databricks SDK voor Python wordt geïmporteerd. In het volgende voorbeeld, in een bestand met de naam main.py met de volgende inhoud, worden alle clusters in uw Azure Databricks-werkruimte weergegeven:

    from databricks.sdk import WorkspaceClient
    
    w = WorkspaceClient()
    
    for c in w.clusters.list():
      print(c.cluster_name)
    
  3. Voer uw Python-codebestand uit, ervan uitgaande van een bestand met de naam main.py, door de opdracht uit te python voeren:

    Venv

    python3.10 main.py
    

    Poëzie

    Als u zich in de shell van de virtuele omgeving bevindt:

    python3.10 main.py
    

    Als u zich niet in de shell van de virtuele omgeving bevindt:

    poetry run python3.10 main.py
    

    Notitie

    Door geen argumenten in de voorgaande aanroep in te w = WorkspaceClient()stellen, gebruikt de Databricks SDK voor Python het standaardproces voor het uitvoeren van Azure Databricks-verificatie. Als u dit standaardgedrag wilt overschrijven, raadpleegt u de volgende verificatiesectie .

De Databricks SDK voor Python verifiëren met uw Azure Databricks-account of -werkruimte

In deze sectie wordt beschreven hoe u de Databricks SDK voor Python kunt verifiëren vanaf uw lokale ontwikkelcomputer naar uw Azure Databricks-account of -werkruimte. Als u de Databricks SDK voor Python wilt verifiëren vanuit een Azure Databricks-notebook, gaat u verder met de Databricks SDK voor Python vanuit een Azure Databricks-notebook.

De Databricks SDK voor Python implementeert de geïntegreerde verificatiestandaard van de Databricks-client, een geconsolideerde en consistente architectuur en programmatische benadering van verificatie. Deze aanpak helpt bij het instellen en automatiseren van verificatie met Azure Databricks gecentraliseerder en voorspelbaarder. Hiermee kunt u Databricks-verificatie eenmaal configureren en deze configuratie vervolgens gebruiken voor meerdere Databricks-hulpprogramma's en SDK's zonder verdere verificatieconfiguratiewijzigingen. Zie voor meer informatie, waaronder meer volledige codevoorbeelden in Python, geïntegreerde verificatie voor Databricks-clients.

Notitie

De Databricks SDK voor Python heeft nog geen verificatie van door Azure beheerde identiteiten geïmplementeerd.

Enkele van de beschikbare coderingspatronen voor het initialiseren van Databricks-verificatie met de Databricks SDK voor Python zijn:

  • Gebruik databricks-standaardverificatie door een van de volgende handelingen uit te voeren:

    • Maak of identificeer een aangepast Databricks-configuratieprofiel met de vereiste velden voor het doelverificatietype Databricks. Stel vervolgens de DATABRICKS_CONFIG_PROFILE omgevingsvariabele in op de naam van het aangepaste configuratieprofiel.
    • Stel de vereiste omgevingsvariabelen in voor het doelverificatietype Databricks.

    Maak vervolgens als volgt een instantie van een WorkspaceClient object met databricks-standaardverificatie:

    from databricks.sdk import WorkspaceClient
    
    w = WorkspaceClient()
    # ...
    
  • Het hard coderen van de vereiste velden wordt ondersteund, maar wordt niet aanbevolen, omdat het risico loopt dat gevoelige informatie in uw code wordt weergegeven, zoals persoonlijke toegangstokens van Azure Databricks. In het volgende voorbeeld worden azure Databricks-host- en toegangstokenwaarden vastgelegd voor databricks-tokenverificatie:

    from databricks.sdk import WorkspaceClient
    
    w = WorkspaceClient(
      host  = 'https://...',
      token = '...'
    )
    # ...
    

Zie ook verificatie in de Databricks SDK voor Python-documentatie.

De Databricks SDK voor Python gebruiken vanuit een Azure Databricks-notebook

U kunt de Databricks SDK voor Python-functionaliteit aanroepen vanuit een Azure Databricks-notebook met een gekoppeld Azure Databricks-cluster waarop de Databricks SDK voor Python is geïnstalleerd. Deze wordt standaard geïnstalleerd op alle Azure Databricks-clusters die gebruikmaken van Databricks Runtime 13.3 LTS of hoger. Voor Azure Databricks-clusters die Databricks Runtime 12.2 LTS en hieronder gebruiken, moet u eerst de Databricks SDK voor Python installeren. Zie stap 1: De Databricks SDK voor Python installeren of upgraden.

Als u de Databricks SDK voor Python-versie wilt zien die is geïnstalleerd voor een specifieke Databricks Runtime-versie, raadpleegt u de sectie Geïnstalleerde Python-bibliotheken van de releaseopmerkingen van Databricks Runtime voor die versie.

Databricks raadt u aan om de nieuwste beschikbare versie van de SDK van PiPy te installeren, maar minimaal te installeren of upgraden naar Databricks SDK voor Python 0.6.0 of hoger, omdat standaardverificatie van Azure Databricks-notebooks wordt gebruikt door versie 0.6.0 en hoger op alle Databricks Runtime-versies.

Notitie

Databricks Runtime 15.1 is de eerste Databricks Runtime waarop een versie van de Databricks SDK voor Python (0.20.0) is geïnstalleerd die ondersteuning biedt voor standaardnotitieblokverificatie zonder upgrade vereist.

De volgende tabel bevat een overzicht van ondersteuning voor notebookverificatie voor Databricks SDK voor Python- en Databricks Runtime-versies:

SDK/DBR 10.4 LTS 11.3 LTS 12.3 LTS 13.3 LTS 14.3 LTS 15.1 en hoger
0.1.7 en lager
0.1.10
0.6.0
0.20.0 en hoger

Standaardverificatie van Azure Databricks-notebooks is afhankelijk van een tijdelijk persoonlijk Azure Databricks-toegangstoken dat azure Databricks automatisch op de achtergrond genereert voor eigen gebruik. Azure Databricks verwijdert dit tijdelijke token nadat het notebook niet meer actief is.

Belangrijk

  • Standaardverificatie van Azure Databricks-notebooks werkt alleen op het stuurprogrammaknooppunt van het cluster en niet op een van de werk- of uitvoerknooppunten van het cluster.
  • Verificatie van Azure Databricks-notebook werkt niet met Azure Databricks-configuratieprofielen.

Als u API's op accountniveau van Azure Databricks wilt aanroepen of als u een ander Databricks-verificatietype wilt gebruiken dan standaardverificatie voor Databricks-notebooks, worden de volgende verificatietypen ook ondersteund:

Authentication type Databricks SDK voor Python-versies
OAuth-verificatie van machine-naar-machine (M2M) 0.18.0 en hoger
OAuth-verificatie van gebruiker naar machine (U2M) 0.19.0 en hoger
Verificatie van Microsoft Entra-ID Service-principal Alle versies
Azure CLI-verificatie Alle versies
Verificatie van persoonlijke toegangstokens van Databricks Alle versies

Verificatie van door Azure beheerde identiteiten wordt nog niet ondersteund.

Stap 1: De Databricks SDK voor Python installeren of upgraden

  1. Azure Databricks Python-notebooks kunnen de Databricks SDK voor Python gebruiken, net als elke andere Python-bibliotheek. Als u de Databricks SDK voor Python-bibliotheek wilt installeren of upgraden op het gekoppelde Azure Databricks-cluster, voert u de %pip magic-opdracht uit vanuit een notebookcel als volgt:

    %pip install databricks-sdk --upgrade
    
  2. Nadat u de %pip magic-opdracht hebt uitgevoerd, moet u Python opnieuw starten om de geïnstalleerde of bijgewerkte bibliotheek beschikbaar te maken voor het notebook. Voer hiervoor de volgende opdracht uit vanuit een notebookcel direct na de cel met de %pip magic-opdracht:

    dbutils.library.restartPython()
    
  3. Als u de geïnstalleerde versie van de Databricks SDK voor Python wilt weergeven, voert u de volgende opdracht uit vanuit een notebookcel:

    %pip show databricks-sdk | grep -oP '(?<=Version: )\S+'
    

Stap 2: Uw code uitvoeren

Maak in uw notebookcellen Python-code die de Databricks SDK voor Python importeert en vervolgens aanroept. In het volgende voorbeeld wordt standaardverificatie van Azure Databricks-notebook gebruikt om alle clusters in uw Azure Databricks-werkruimte weer te geven:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

for c in w.clusters.list():
  print(c.cluster_name)

Wanneer u deze cel uitvoert, wordt er een lijst weergegeven met de namen van alle beschikbare clusters in uw Azure Databricks-werkruimte.

Als u een ander verificatietype voor Azure Databricks wilt gebruiken, raadpleegt u De verificatiemethoden van Azure Databricks en klikt u op de bijbehorende koppeling voor aanvullende technische details.

Databricks Utilities gebruiken

U kunt databricks Utilities (dbutils) aanroepen vanuit de Databricks SDK voor Python-code die wordt uitgevoerd op uw lokale ontwikkelcomputer of vanuit een Azure Databricks-notebook.

  • Vanaf uw lokale ontwikkelcomputer heeft Databricks Utilities alleen toegang tot de dbutils.fs, dbutils.secretsen dbutils.widgetsdbutils.jobs opdrachtgroepen.
  • Vanuit een Azure Databricks-notebook dat is gekoppeld aan een Azure Databricks-cluster, heeft Databricks Utilities toegang tot alle beschikbare Databricks Utilities-opdrachtgroepen, niet alleen dbutils.fs, dbutils.secretsen dbutils.widgets. Daarnaast is de dbutils.notebook opdrachtgroep beperkt tot slechts twee niveaus van opdrachten, bijvoorbeeld dbutils.notebook.run of dbutils.notebook.exit.

Als u Databricks Utilities wilt aanroepen vanaf uw lokale ontwikkelcomputer of een Azure Databricks-notebook, gebruikt u dbutils binnen WorkspaceClient. In dit codevoorbeeld wordt standaardverificatie van Azure Databricks-notebook gebruikt om de paden van alle objecten in de DBFS-hoofdmap van de werkruimte weer te dbutils WorkspaceClient geven.

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
d = w.dbutils.fs.ls('/')

for f in d:
  print(f.path)

U kunt ook rechtstreeks bellen dbutils . U bent echter beperkt tot het gebruik van standaardverificatie van Azure Databricks-notebooks. Dit codevoorbeeld roept dbutils rechtstreeks aan om alle objecten in de DBFS-hoofdmap van de werkruimte weer te geven.

from databricks.sdk.runtime import *

d = dbutils.fs.ls('/')

for f in d:
  print(f.path)

Als u toegang wilt krijgen tot Unity Catalog-volumes, gebruikt u files binnen WorkspaceClient. Zie Bestanden beheren in Unity Catalog-volumes. U kunt deze niet dbutils zelf of binnen WorkspaceClient gebruiken om toegang te krijgen tot volumes.

Zie ook Interactie met dbutils.

Codevoorbeelden

In de volgende codevoorbeelden ziet u hoe u de Databricks SDK voor Python gebruikt om clusters te maken en te verwijderen, taken uit te voeren en groepen op accountniveau weer te geven. In deze codevoorbeelden wordt standaardverificatie voor Azure Databricks-notebooks gebruikt. Zie De Databricks SDK voor Python gebruiken vanuit een Azure Databricks-notebook voor meer informatie over de standaardverificatie van Azure Databricks-notebooks. Zie De Databricks SDK voor Python verifiëren met uw Azure Databricks-account of -werkruimte voor meer informatie over standaardverificatie buiten notebooks.

Zie de voorbeelden in de Databricks SDK voor Python-opslagplaats in GitHub voor aanvullende codevoorbeelden . Zie ook:

Een cluster maken

In dit codevoorbeeld wordt een cluster gemaakt met de opgegeven Databricks Runtime-versie en het type clusterknooppunt. Dit cluster heeft één werkrol en het cluster wordt na 15 minuten niet-actieve tijd automatisch beëindigd.

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

print("Attempting to create cluster. Please wait...")

c = w.clusters.create_and_wait(
  cluster_name             = 'my-cluster',
  spark_version            = '12.2.x-scala2.12',
  node_type_id             = 'Standard_DS3_v2',
  autotermination_minutes  = 15,
  num_workers              = 1
)

print(f"The cluster is now ready at " \
      f"{w.config.host}#setting/clusters/{c.cluster_id}/configuration\n")

Een cluster definitief verwijderen

In dit codevoorbeeld wordt het cluster definitief verwijderd met de opgegeven cluster-id uit de werkruimte.

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

c_id = input('ID of cluster to delete (for example, 1234-567890-ab123cd4): ')

w.clusters.permanent_delete(cluster_id = c_id)

Een taak maken

In dit codevoorbeeld wordt een Azure Databricks-taak gemaakt waarmee het opgegeven notebook op het opgegeven cluster wordt uitgevoerd. Wanneer de code wordt uitgevoerd, worden het pad van het bestaande notebook, de bestaande cluster-id en de gerelateerde taakinstellingen van de gebruiker in de terminal opgehaald.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.jobs import Task, NotebookTask, Source

w = WorkspaceClient()

job_name            = input("Some short name for the job (for example, my-job): ")
description         = input("Some short description for the job (for example, My job): ")
existing_cluster_id = input("ID of the existing cluster in the workspace to run the job on (for example, 1234-567890-ab123cd4): ")
notebook_path       = input("Workspace path of the notebook to run (for example, /Users/someone@example.com/my-notebook): ")
task_key            = input("Some key to apply to the job's tasks (for example, my-key): ")

print("Attempting to create the job. Please wait...\n")

j = w.jobs.create(
  name = job_name,
  tasks = [
    Task(
      description = description,
      existing_cluster_id = existing_cluster_id,
      notebook_task = NotebookTask(
        base_parameters = dict(""),
        notebook_path = notebook_path,
        source = Source("WORKSPACE")
      ),
      task_key = task_key
    )
  ]
)

print(f"View the job at {w.config.host}/#job/{j.job_id}\n")

Een taak maken die gebruikmaakt van serverloze compute

In het volgende voorbeeld wordt een taak gemaakt die gebruikmaakt van serverloze compute voor taken:

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.jobs import NotebookTask, Source, Task

w = WorkspaceClient()

j = w.jobs.create(
  name = "My Serverless Job",
  tasks = [
    Task(
      notebook_task = NotebookTask(
      notebook_path = "/Users/user@databricks.com/MyNotebook",
      source = Source("WORKSPACE")
      ),
      task_key = "MyTask",
   )
  ]
)

Bestanden beheren in Unity Catalog-volumes

In dit codevoorbeeld ziet u verschillende aanroepen naar files functionaliteit binnen WorkspaceClient om toegang te krijgen tot een Unity Catalog-volume.

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

# Define volume, folder, and file details.
catalog            = 'main'
schema             = 'default'
volume             = 'my-volume'
volume_path        = f"/Volumes/{catalog}/{schema}/{volume}" # /Volumes/main/default/my-volume
volume_folder      = 'my-folder'
volume_folder_path = f"{volume_path}/{volume_folder}" # /Volumes/main/default/my-volume/my-folder
volume_file        = 'data.csv'
volume_file_path   = f"{volume_folder_path}/{volume_file}" # /Volumes/main/default/my-volume/my-folder/data.csv
upload_file_path   = './data.csv'

# Create an empty folder in a volume.
w.files.create_directory(volume_folder_path)

# Upload a file to a volume.
with open(upload_file_path, 'rb') as file:
  file_bytes = file.read()
  binary_data = io.BytesIO(file_bytes)
  w.files.upload(volume_file_path, binary_data, overwrite = True)

# List the contents of a volume.
for item in w.files.list_directory_contents(volume_path):
  print(item.path)

# List the contents of a folder in a volume.
for item in w.files.list_directory_contents(volume_folder_path):
  print(item.path)

# Print the contents of a file in a volume.
resp = w.files.download(volume_file_path)
print(str(resp.contents.read(), encoding='utf-8'))

# Delete a file from a volume.
w.files.delete(volume_file_path)

# Delete a folder from a volume.
w.files.delete_directory(volume_folder_path)

Groepen op accountniveau weergeven

In dit codevoorbeeld worden de weergavenamen voor alle beschikbare groepen in het Azure Databricks-account weergegeven.

from databricks.sdk import AccountClient

a = AccountClient()

for g in a.groups.list():
  print(g.display_name)

Testen

Als u uw code wilt testen, gebruikt u Python-testframeworks zoals pytest. Als u uw code wilt testen onder gesimuleerde omstandigheden zonder Azure Databricks REST API-eindpunten aan te roepen of de status van uw Azure Databricks-accounts of -werkruimten te wijzigen, gebruikt u Python-mockbibliotheken zoals unittest.mock.

Tip

Databricks Labs biedt een pytest-invoegtoepassing om integratietests met Databricks en een pylint-invoegtoepassing te vereenvoudigen om codekwaliteit te garanderen.

Het volgende voorbeeldbestand met de naam helpers.py bevat een create_cluster functie die informatie retourneert over het nieuwe cluster:

# helpers.py

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.compute import ClusterDetails

def create_cluster(
  w: WorkspaceClient,
  cluster_name:            str,
  spark_version:           str,
  node_type_id:            str,
  autotermination_minutes: int,
  num_workers:             int
) -> ClusterDetails:
  response = w.clusters.create(
    cluster_name            = cluster_name,
    spark_version           = spark_version,
    node_type_id            = node_type_id,
    autotermination_minutes = autotermination_minutes,
    num_workers             = num_workers
  )
  return response

Op basis van het volgende bestand met de naam main.py waarmee de create_cluster functie wordt aangeroepen:

# main.py

from databricks.sdk import WorkspaceClient
from helpers import *

w = WorkspaceClient()

# Replace <spark-version> with the target Spark version string.
# Replace <node-type-id> with the target node type string.
response = create_cluster(
  w = w,
  cluster_name            = 'Test Cluster',
  spark_version           = '<spark-version>',
  node_type_id            = '<node-type-id>',
  autotermination_minutes = 15,
  num_workers             = 1
)

print(response.cluster_id)

Het volgende bestand met de naam test_helpers.py test of de create_cluster functie het verwachte antwoord retourneert. In plaats van een cluster te maken in de doelwerkruimte, wordt met deze test een WorkspaceClient object gesimuleerd, worden de instellingen van het gesimuleerde object gedefinieerd en wordt het gesimuleerde object vervolgens doorgegeven aan de create_cluster functie. De test controleert vervolgens of de functie de verwachte id van het nieuwe gesimuleerde cluster retourneert.

# test_helpers.py

from databricks.sdk import WorkspaceClient
from helpers import *
from unittest.mock import create_autospec # Included with the Python standard library.

def test_create_cluster():
  # Create a mock WorkspaceClient.
  mock_workspace_client = create_autospec(WorkspaceClient)

  # Set the mock WorkspaceClient's clusters.create().cluster_id value.
  mock_workspace_client.clusters.create.return_value.cluster_id = '123abc'

  # Call the actual function but with the mock WorkspaceClient.
  # Replace <spark-version> with the target Spark version string.
  # Replace <node-type-id> with the target node type string.
  response = create_cluster(
    w = mock_workspace_client,
    cluster_name            = 'Test Cluster',
    spark_version           = '<spark-version>',
    node_type_id            = '<node-type-id>',
    autotermination_minutes = 15,
    num_workers             = 1
  )

  # Assert that the function returned the mocked cluster ID.
  assert response.cluster_id == '123abc'

Als u deze test wilt uitvoeren, voert u de pytest opdracht uit vanuit de hoofdmap van het codeproject, wat testresultaten moet opleveren die vergelijkbaar zijn met de volgende:

$ pytest
=================== test session starts ====================
platform darwin -- Python 3.12.2, pytest-8.1.1, pluggy-1.4.0
rootdir: <project-rootdir>
collected 1 item

test_helpers.py . [100%]
======================== 1 passed ==========================

Aanvullende bronnen

Zie voor meer informatie: