Databricks SDK per Python
Nota
Databricks consiglia i bundle di asset di Databricks per la creazione, lo sviluppo, la distribuzione e il test di processi e altre risorse di Databricks come codice sorgente. Consultare Che cosa sono i Databricks Asset Bundle?.
Questo articolo illustra come automatizzare le operazioni di Azure Databricks e accelerare lo sviluppo con Databricks SDK per Python. Questo articolo integra la documentazione di Databricks SDK per Python in Read The Docs e gli esempi di codice nel repository Databricks SDK per Python in GitHub.
Nota
Databricks SDK per Python è in versione beta e può essere usato nell'ambiente di produzione.
Durante il periodo beta, Databricks consiglia di aggiungere una dipendenza dalla versione secondaria specifica di Databricks SDK per Python da cui dipende il codice. Ad esempio, è possibile aggiungere dipendenze nei file, ad esempio requirements.txt
per venv
, o pyproject.toml
per poetry.lock
per Poetry. Per altre informazioni sull'aggiunta delle dipendenze, consultare Ambienti virtuali e pacchetti per venv
o Installazione di dipendenze per Poetry.
Operazioni preliminari
È possibile usare Databricks SDK per Python da un notebook di Azure Databricks o dal computer di sviluppo locale.
- Per usare Databricks SDK per Python dall'interno di un notebook di Azure Databricks, passare a Usare Databricks SDK per Python da un notebook di Azure Databricks.
- Per usare Databricks SDK per Python dal computer di sviluppo locale, completare i passaggi descritti in questa sezione.
Prima di iniziare a usare Databricks SDK per Python, il computer di sviluppo deve avere:
- Autenticazione di Azure Databricks configurata.
- Python 3.8 o versione successiva installata. Per automatizzare le risorse di calcolo di Azure Databricks, Databricks consiglia di avere installato le versioni principali e secondarie di Python che corrispondono a quella installata nella risorsa di calcolo di Azure Databricks di destinazione. Gli esempi di questo articolo si basano sull'automazione dei cluster con Databricks Runtime 13.3 LTS, che include Python 3.10 installato. Per la versione corretta, consultare Versioni delle note sulla versione di Databricks Runtime e compatibilità per la versione di Databricks Runtime del cluster.
- Databricks consiglia di creare e attivare un ambiente virtuale Python per ogni progetto Python usato con Databricks SDK per Python. Gli ambienti virtuali Python consentono di assicurarsi che il progetto di codice usi versioni compatibili dei pacchetti Python e Python (in questo caso, il pacchetto Databricks SDK per Python). Per ulteriori informazioni sugli ambienti virtuali Python, vedere venv o Poetry.
Introduzione a Databricks SDK per Python
Questa sezione descrive come iniziare a usare Databricks SDK per Python dal computer di sviluppo locale. Per usare Databricks SDK per Python dall'interno di un notebook di Azure Databricks, passare a Usare Databricks SDK per Python da un notebook di Azure Databricks.
Nel computer di sviluppo con l'autenticazione di Azure Databricks configurata, Python è già installato e l'ambiente virtuale Python già attivato, installare il pacchetto databricks-sdk (e le relative dipendenze) dall'indice dei pacchetti Python (PyPI), come indicato di seguito:
Venv
Eseguire
pip
per installare il pacchettodatabricks-sdk
. (In alcuni sistemi potrebbe essere necessario sostituirepip3
conpip
, in questo caso e dappertutto).pip3 install databricks-sdk
Poetry
poetry add databricks-sdk
Per installare una versione specifica del pacchetto
databricks-sdk
mentre Databricks SDK per Python è in versione beta, consultare la cronologia delle versioni del pacchetto. Ad esempio, per installare la versione0.1.6
:Venv
pip3 install databricks-sdk==0.1.6
Poetry
poetry add databricks-sdk==0.1.6
Per aggiornare un'installazione esistente del pacchetto Databricks SDK per Python alla versione più recente, usare il comando seguente:
Venv
pip3 install --upgrade databricks-sdk
Poetry
poetry add databricks-sdk@latest
Per visualizzare l'SDK di Databricks per Python corrente
Version
e altri dettagli, eseguire il comando seguente:Venv
pip3 show databricks-sdk
Poetry
poetry show databricks-sdk
Nell'ambiente virtuale Python creare un file di codice Python che importa Databricks SDK per Python. L'esempio seguente, in un file denominato
main.py
con il contenuto seguente, elenca semplicemente tutti i cluster nell'area di lavoro di Azure Databricks:from databricks.sdk import WorkspaceClient w = WorkspaceClient() for c in w.clusters.list(): print(c.cluster_name)
Eseguire il file di codice Python, presupponendo che un file denominato
main.py
, eseguendo il comandopython
:Venv
python3.10 main.py
Poetry
Se ci si trova nella shell dell'ambiente virtuale:
python3.10 main.py
Se non ci si trova nella shell dell'ambiente virtuale:
poetry run python3.10 main.py
Nota
Non impostando argomenti nella chiamata precedente a
w = WorkspaceClient()
, Databricks SDK per Python usa il processo predefinito per tentare di eseguire l'autenticazione di Azure Databricks. Per eseguire l'override di questo comportamento predefinito, consultare la sezione di autenticazione seguente.
Autenticare Databricks SDK per Python con l'account o l'area di lavoro di Azure Databricks
Questa sezione descrive come autenticare Databricks SDK per Python dal computer di sviluppo locale all'account o all'area di lavoro di Azure Databricks. Per autenticare Databricks SDK per Python dall'interno di un notebook di Azure Databricks, passare a Usare Databricks SDK per Python da un notebook di Azure Databricks.
Databricks SDK per Python implementa lo standard di autenticazione unificata del client Databricks, un approccio architetturale e programmatico consolidato e coerente all'autenticazione. Questo approccio consente di configurare e automatizzare l'autenticazione con Azure Databricks più centralizzato e prevedibile. Consente di configurare l'autenticazione di Databricks una sola volta e quindi di usarla tra più strumenti e SDK di Databricks senza ulteriori modifiche alla configurazione dell'autenticazione. Per altre informazioni, inclusi esempi di codice più completi in Python, consultare Autenticazione unificata del client Databricks.
Nota
Databricks SDK per Python non ha ancora implementato l'autenticazione delle identità gestite di Azure.
Alcuni dei modelli di codifica disponibili per inizializzare l'autenticazione di Databricks con Databricks SDK per Python includono:
Usare l'autenticazione predefinita di Databricks eseguendo una delle operazioni seguenti:
- Creare o identificare un profilo di configurazione di Databricks personalizzato con i campi obbligatori per il tipo di autenticazione databricks di destinazione. Impostare quindi la variabile di ambiente
DATABRICKS_CONFIG_PROFILE
sul nome del profilo di configurazione personalizzato. - Impostare le variabili di ambiente necessarie per il tipo di autenticazione di Databricks di destinazione.
Creare quindi un'istanza di un oggetto
WorkspaceClient
con l'autenticazione predefinita di Databricks come indicato di seguito:from databricks.sdk import WorkspaceClient w = WorkspaceClient() # ...
- Creare o identificare un profilo di configurazione di Databricks personalizzato con i campi obbligatori per il tipo di autenticazione databricks di destinazione. Impostare quindi la variabile di ambiente
L’hardcoded dei campi obbligatori è supportato ma non consigliato, perché rischia di esporre informazioni riservate nel codice, ad esempio i token di accesso personale di Azure Databricks. L'esempio seguente imposta come hardcoded Azure Databricks host e valori dei token di accesso per l'autenticazione del token di Databricks:
from databricks.sdk import WorkspaceClient w = WorkspaceClient( host = 'https://...', token = '...' ) # ...
Consultare anche Autenticazione nella documentazione di Databricks SDK per Python.
Usare Databricks SDK per Python da un notebook di Azure Databricks
È possibile chiamare la funzionalità di Databricks SDK per Python da un notebook di Azure Databricks con un cluster Azure Databricks collegato con Databricks SDK per Python installato. È installato per impostazione predefinita in tutti i cluster di Azure Databricks che usano Databricks Runtime 13.3 LTS o nelle versioni successive. Per i cluster Di Azure Databricks che usano Databricks Runtime 12.2 LTS e nelle versioni successive, è prima necessario installare Databricks SDK per Python. Vedere Passaggio 1: Installare o aggiornare Databricks SDK per Python.
Per vedere la versione di Databricks SDK per Python installata per una specifica versione di Databricks Runtime, consultare la sezione Librerie Python installate delle note di rilascio di Databricks Runtime per quella versione.
Databricks consiglia di installare la versione più recente disponibile dell'SDK da PiPy, ma con un'installazione minima o un aggiornamento a Databricks SDK per Python 0.6.0 o versione successiva, l'autenticazione predefinita del notebook di Azure Databricks viene usata dalla versione 0.6.0 e successive in tutte le versioni di Databricks Runtime.
Nota
Databricks Runtime 15.1 è il primo Databricks Runtime ad avere una versione di Databricks SDK per Python (0.20.0) installata che supporta l'autenticazione predefinita dei notebook senza alcun aggiornamento necessario.
La tabella seguente illustra il supporto dell'autenticazione dei notebook per Databricks SDK per python e le versioni di Databricks Runtime:
SDK/DBR | 10,4 LTS | 11,3 LTS | 12.3 LTS | 13,3 LTS | 14.3 LTS | 15.1 e versioni successive |
---|---|---|---|---|---|---|
0.1.7 e versioni precedenti | ||||||
0.1.10 | ✓ | ✓ | ✓ | ✓ | ✓ | |
0.6.0 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
0.20.0 e versioni successive | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
L'autenticazione predefinita del notebook di Azure Databricks si basa su un token di accesso personale di Azure Databricks temporaneo generato automaticamente in background per il proprio uso. Azure Databricks elimina questo token temporaneo dopo l'arresto dell'esecuzione del notebook.
Importante
- L'autenticazione predefinita del notebook di Azure Databricks funziona solo nel nodo driver del cluster e non in uno dei nodi di lavoro o executor del cluster.
- L'autenticazione del notebook di Azure Databricks non funziona con i profili di configurazione di Azure Databricks.
Se si desidera chiamare le API a livello di account di Azure Databricks o se si vuole usare un tipo di autenticazione databricks diverso dall'autenticazione predefinita del notebook di Databricks, sono supportati anche i seguenti tipi di autenticazione:
Tipo di autenticazione | Versioni di Databricks SDK per Python |
---|---|
Autenticazione OAuth da computer a computer (M2M) | 0.18.0 e versioni successive |
Autenticazione da utente a computer (U2M) OAuth | 0.19.0 e versioni successive |
Autenticazione entità servizio di Microsoft Entra ID | Tutte le versioni |
Autenticazione con interfaccia della riga di comando di Azure | Tutte le versioni |
Autenticazione con token di accesso personale di Databricks | Tutte le versioni |
Autenticazione delle identità gestite di Azure non è ancora supportata.
Passaggio 1: installare o aggiornare Databricks SDK per Python.
I notebook Python di Azure Databricks possono usare Databricks SDK per Python esattamente come qualsiasi altra libreria Python. Per installare o aggiornare la libreria Databricks SDK per Python nel cluster Azure Databricks collegato, eseguire il comando magic
%pip
da una cella del notebook come indicato di seguito:%pip install databricks-sdk --upgrade
Dopo aver eseguito il comando magic
%pip
, è necessario riavviare Python per rendere disponibile la libreria installata o aggiornata per il notebook. A tale scopo, eseguire il comando seguente da una cella del notebook immediatamente dopo la cella con il comando magic%pip
:dbutils.library.restartPython()
Per visualizzare la versione installata di Databricks SDK per Python, eseguire il comando seguente da una cella del notebook:
%pip show databricks-sdk | grep -oP '(?<=Version: )\S+'
Passaggio 2: eseguire il codice
Nelle celle del notebook creare codice Python che importa e quindi chiama Databricks SDK per Python. L'esempio seguente usa l'autenticazione predefinita del notebook di Azure Databricks per elencare tutti i cluster nell'area di lavoro di Azure Databricks:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
for c in w.clusters.list():
print(c.cluster_name)
Quando si esegue questa cella, viene visualizzato un elenco dei nomi di tutti i cluster disponibili nell'area di lavoro di Azure Databricks.
Per usare un tipo di autenticazione di Azure Databricks diverso, consultare Metodi di autenticazione di Azure Databricks e fare clic sul collegamento corrispondente per altri dettagli tecnici.
Usa utilità di Databricks
È possibile chiamare informazioni di riferimento sulle utilità di Databricks (dbutils) dal codice Databricks SDK per Python in esecuzione nel computer di sviluppo locale o da un notebook di Azure Databricks.
- Dal computer di sviluppo locale, Le utilità di Databricks hanno accesso solo ai gruppi di comandi
dbutils.fs
,dbutils.secrets
,dbutils.widgets
edbutils.jobs
. - Da un notebook di Azure Databricks collegato a un cluster di Azure Databricks, Le utilità di Databricks hanno accesso a tutti i gruppi di comandi di Databricks Utilities disponibili, non solo
dbutils.fs
,dbutils.secrets
edbutils.widgets
. Inoltre, il gruppo di comandidbutils.notebook
è limitato a due livelli solo di comandi, ad esempiodbutils.notebook.run
odbutils.notebook.exit
.
Per chiamare Le utilità di Databricks dal computer di sviluppo locale o da un notebook di Azure Databricks, usare dbutils
all'interno di WorkspaceClient
. Questo esempio di codice usa l'autenticazione predefinita del notebook di Azure Databricks per chiamare dbutils
all'interno di WorkspaceClient
per elencare i percorsi di tutti gli oggetti nella radice DBFS dell'area di lavoro.
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
d = w.dbutils.fs.ls('/')
for f in d:
print(f.path)
In alternativa, è possibile chiamare dbutils
direttamente. Tuttavia, è possibile usare solo l'autenticazione predefinita del notebook di Azure Databricks. Questo esempio di codice chiama dbutils
direttamente per elencare tutti gli oggetti nella radice DBFS dell'area di lavoro.
from databricks.sdk.runtime import *
d = dbutils.fs.ls('/')
for f in d:
print(f.path)
Per accedere ai volumi del catalogo Unity, usare files
all'interno di WorkspaceClient
. Consultare Gestire file nei volumi nel catalogo Unity. Non è possibile usare dbutils
da solo o all'interno di WorkspaceClient
per accedere ai volumi.
Consultare anche Interazione con dbutils.
Esempi di codice
Gli esempi di codice seguenti illustrano come usare Databricks SDK per Python per creare ed eliminare cluster, eseguire processi ed elencare gruppi a livello di account. Questi esempi di codice usano l'autenticazione predefinita del notebook di Azure Databricks. Per informazioni dettagliate sull'autenticazione predefinita dei notebook di Azure Databricks, consultare Usare Databricks SDK per Python da un notebook di Azure Databricks. Per informazioni dettagliate sull'autenticazione predefinita all'esterno dei notebook, consultare Autenticare Databricks SDK per Python con l'account o l'area di lavoro di Azure Databricks.
Per altri esempi di codice, consultare gli esempi nel repository Databricks SDK per Python in GitHub. Vedere anche:
Informazioni di riferimento sulle API dell'area di lavoro di Databricks
Informazioni di riferimento sulle API dell'account Databricks
Creare un cluster
Questo esempio di codice crea un cluster con la versione di Databricks Runtime e il tipo di nodo del cluster specificati. Questo cluster ha un ruolo di lavoro e il cluster terminerà automaticamente dopo 15 minuti di inattività.
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")
Eliminare in modo definitivo un cluster
Questo esempio di codice elimina definitivamente il cluster con l'ID cluster specificato dall'area di lavoro.
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)
Creare un processo
Questo esempio di codice crea un processo di Azure Databricks che esegue il notebook specificato nel cluster specificato. Durante l'esecuzione del codice, ottiene il percorso del notebook esistente, l'ID cluster esistente e le impostazioni del processo correlate dall'utente nel terminale.
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")
Creare un processo che usa l'ambiente di calcolo serverless
Nell'esempio seguente viene creato un processo che usa l'ambiente di calcolo serverless per i processi:
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",
)
]
)
Gestisce i file nei volumi nel catalogo Unity
Questo esempio di codice illustra varie chiamate alle funzionalità files
all'interno di WorkspaceClient
per accedere a un volume del catalogo Unity.
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)
Elencare i gruppi a livello di account
Questo esempio di codice elenca i nomi visualizzati per tutti i gruppi disponibili all'interno dell'account Azure Databricks.
from databricks.sdk import AccountClient
a = AccountClient()
for g in a.groups.list():
print(g.display_name)
Test
Per testare il codice, usare framework di test Python come pytest. Per testare il codice in condizioni simulate senza chiamare gli endpoint dell'API REST di Azure Databricks o modificare lo stato degli account o delle aree di lavoro di Azure Databricks, è possibile usare librerie di simulazione di Python, ad esempio unittest.mock.
Suggerimento
Databricks Labs fornisce un plug-in pytest per semplificare i test di integrazione con Databricks e un plug-in pylint per garantire la qualità del codice.
Il file di esempio seguente denominato helpers.py
contiene una create_cluster
funzione che restituisce informazioni sul nuovo 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
Dato il file seguente denominato main.py
che chiama la create_cluster
funzione:
# 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)
Il file seguente denominato test_helpers.py
verifica se la funzione create_cluster
restituisce la risposta prevista. Anziché creare un cluster nell'area di lavoro di destinazione, questo test simula un oggetto WorkspaceClient
, definisce le impostazioni dell'oggetto fittizio e quindi passa l'oggetto fittizio alla funzione create_cluster
. Il test verifica quindi se la funzione restituisce l'ID previsto del nuovo cluster fittizio.
# 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'
Per eseguire questo test, eseguire il comando pytest
dalla radice del progetto di codice che dovrebbe produrre risultati di test simili ai seguenti:
$ 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 ==========================
Risorse aggiuntive
Per altre informazioni, vedi: