Lavorare con i moduli Python e R
Questo articolo descrive come usare percorsi relativi per importare moduli Python e R personalizzati archiviati nei file dell'area di lavoro insieme ai notebook di Databricks. I file dell'area di lavoro possono facilitare cicli di vita di sviluppo più stretti, consentendo di modularizzare il codice, convertire i comandi %run in istruzioni di importazione e effettuare il refactoring dei file della rotellina Python in moduli con co-controllo delle versioni. È anche possibile usare il terminale Web databricks predefinito per testare il codice.
Nota
In Databricks Runtime 14.0 e versioni successive, la directory di lavoro corrente predefinita (CWD) per il codice eseguito in locale è la directory contenente il Notebook o lo script in esecuzione. Si tratta di una modifica del comportamento da Databricks Runtime 13.3 LTS e versioni successive. Vedere Informazioni sul valore predefinito: directory di lavoro corrente del progetto.
Importare moduli Python e R
Importante
In Databricks Runtime 13.3 LTS e versioni successive, le directory aggiunte alle directory Python sys.path
o strutturate come pacchetti Python vengono distribuite automaticamente a tutti gli executor nel cluster. In Databricks Runtime 12.2 LTS e versioni successive le librerie aggiunte a sys.path
devono essere installate in modo esplicito negli executor.
In Databricks Runtime 11.3 LTS e versioni successive la directory di lavoro corrente del notebook viene aggiunta automaticamente al percorso Python. Se si usano cartelle Git, viene aggiunta la directory del repository radice.
Per importare moduli da un'altra directory, è necessario aggiungere la directory contenente il modulo a sys.path
. È possibile specificare directory usando un percorso relativo, come nell'esempio seguente:
import sys
import os
sys.path.append(os.path.abspath('..'))
Le funzioni vengono importate da un modulo archiviato nei file dell'area di lavoro esattamente come si farebbe da un modulo salvato come libreria cluster o libreria con ambito notebook:
Python
from sample import power
power.powerOfTwo(3)
R
source("sample.R")
power.powerOfTwo(3)
Importante
Quando si usa un'istruzione import
e più librerie con lo stesso nome esistono, Databricks usa regole di precedenza per determinare quale libreria caricare. Vedere Precedenza della libreria Python.
Caricamento automatico per i moduli Python
Se si modificano più file durante lo sviluppo di codice Python, è possibile abilitare l'estensione autoreload
per ricaricare automaticamente tutti i moduli importati in modo che i comandi eseguano la selezione di tali modifiche. Usare i comandi seguenti in qualsiasi cella del notebook o file Python per abilitare l'estensione autoreload
:
%load_ext autoreload
%autoreload 2
L'estensione autoreload
funziona solo nel processo del driver Spark e non ricarica il codice nei processi dell'executor Spark. Poiché funziona solo nel nodo del driver Spark e non nei nodi che eseguono l'executor Spark, non è consigliabile usare autoreload
quando si sviluppano moduli eseguiti nei nodi di lavoro, ad esempio funzioni definite dall'utente.
In Databricks Runtime 16.0 e versioni successive l'estensione autoreload
in Databricks aggiunge le funzionalità seguenti:
- Supporto per il ricaricamento mirato dei moduli per le modifiche interne alle funzioni. Ricaricando solo la parte modificata di un modulo, quando possibile, si garantisce che sia presente solo un'istanza esternamente visibile di ogni oggetto, che è più sicura e affidabile.
- Quando si importa un modulo Python da un file dell'area di lavoro, Databricks suggerisce automaticamente di usare
autoreload
se il modulo è stato modificato dall'ultima importazione.
Per altre informazioni sull'estensioneautoreload
, vedere la documentazione relativa al caricamento automatico di IPython.
Effettuare il refactoring del codice
Una procedura consigliata per lo sviluppo di codice consiste nel modularizzare il codice in modo che possa essere facilmente riutilizzato. È possibile creare file Python personalizzati con file dell'area di lavoro e rendere disponibile il codice in tali file per un notebook usando l'istruzione import
.
Per effettuare il refactoring del codice del notebook in file riutilizzabili:
- Creare un nuovo file di codice sorgente per il codice.
- Aggiungere istruzioni di importazione Python al notebook per rendere disponibile il codice nel nuovo file per il notebook.
Eseguire la migrazione da %run
comandi
Se si usano %run
comandi per rendere disponibili funzioni Python o R in un notebook in un altro notebook o si installano file personalizzati in un cluster, è consigliabile includere tali moduli personalizzati .whl
come file dell'area di lavoro. In questo modo, è possibile mantenere sincronizzati i notebook e altri moduli di codice, assicurandosi che il notebook usi sempre la versione corretta.
%run
I comandi consentono di includere un notebook in un altro e vengono spesso usati per rendere disponibile il codice Python o R di supporto per un notebook. In questo esempio, un notebook denominato power.py
include il codice seguente.
# This code is in a notebook named "power.py".
def n_to_mth(n,m):
print(n, "to the", m, "th power is", n**m)
È quindi possibile rendere le funzioni definite in power.py
disponibili per un notebook diverso con un %run
comando:
# This notebook uses a %run command to access the code in "power.py".
%run ./power
n_to_mth(3, 4)
Usando i file dell'area di lavoro, è possibile importare direttamente il modulo che contiene il codice Python ed eseguire la funzione.
from power import n_to_mth
n_to_mth(3, 4)
Effettuare il refactoring dei file Python .whl
nelle librerie relative
È possibile installare file personalizzati .whl
in un cluster e quindi importarli in un notebook collegato a tale cluster. Tuttavia, questo processo potrebbe essere complesso e soggetto a errori per il codice aggiornato di frequente. I file dell'area di lavoro consentono di mantenere questi file Python nella stessa directory dei notebook che usano il codice, assicurando che il notebook usi sempre la versione corretta.
Per altre informazioni sulla creazione di pacchetti di progetti Python, vedere questa esercitazione.
Usare il terminale Web di Azure Databricks per i test
È possibile usare il terminale Web di Azure Databricks per testare le modifiche apportate al codice Python o R senza usare un notebook per importare ed eseguire il file.
- Aprire il terminale Web.
- Passare alla directory :
cd /Workspace/Users/<path-to-directory>/
. - Eseguire il file Python o R:
python file_name.py
oRscript file_name.r
.