Arbeiten mit Python- und R-Modulen
In diesem Artikel wird beschrieben, wie Sie relative Pfade verwenden können, um benutzerdefinierte Python- und R-Module zu importieren, die zusammen mit Ihren Databricks-Notebooks in Arbeitsbereichsdateien gespeichert sind. Arbeitsbereichsdateien ermöglichen engere Entwicklungszyklen, sodass Sie Ihren Code modularisieren, %run-Befehle in Importanweisungen konvertieren und Python-Wheel-Dateien zu Modulen mit gemeinsamer Versionierung umgestalten können. Sie können auch das integrierte Databricks-Webterminal zum Testen Ihres Codes verwenden.
Hinweis
In Databricks Runtime 14.0 und höher ist das aktuelle Standardarbeitsverzeichnis (CWD) für lokal ausgeführten Code das Verzeichnis, das das ausgeführte Notebook oder Skript enthält. Dies ist eine Verhaltensänderung von Databricks Runtime 13.3 LTS und niedriger. Weitere Informationen finden Sie unter Was ist das aktuelle Standardarbeitsverzeichnis?.
Importieren von Python- und R-Modulen
Wichtig
In Databricks Runtime 13.3 LTS und höher werden Verzeichnisse, die dem Python-Pfad sys.path
hinzugefügt wurden, oder Verzeichnisse, die als Python-Pakete strukturiert sind, automatisch an alle Executors im Cluster verteilt. In Databricks Runtime 12.2 LTS und niedriger müssen Bibliotheken, die sys.path
hinzugefügt werden, explizit auf Executors installiert werden.
In Databricks Runtime 11.3 LTS und höher wird das aktuelle Arbeitsverzeichnis Ihres Notebooks automatisch dem Python-Pfad hinzugefügt. Wenn Sie Git-Ordner verwenden, wird das Stammrepositoryverzeichnis hinzugefügt.
Um Module aus einem anderen Verzeichnis zu importieren, müssen Sie das Verzeichnis, in dem das Modul enthalten ist, zu sys.path
hinzufügen. Sie können Verzeichnisse mit einem relativen Pfad angeben, wie im folgenden Beispiel:
import sys
import os
sys.path.append(os.path.abspath('..'))
Der Import von Funktionen aus einem Modul, das in Arbeitsbereichsdateien gespeichert ist, in ein Repository erfolgt genauso wie aus einem Modul, das als Clusterbibliothek oder Notebook-bezogene Bibliothek gespeichert ist:
Python
from sample import power
power.powerOfTwo(3)
R
source("sample.R")
power.powerOfTwo(3)
Wichtig
Wenn Sie eine import
Anweisung und mehrere Bibliotheken mit demselben Namen verwenden, verwendet Databricks Rangfolgeregeln, um zu bestimmen, welche Bibliothek geladen werden soll. Weitere Informationen finden Sie unter Rangfolge der Python-Bibliothek.
Automatisches erneutes Laden für Python-Module
Wenn Sie beim Entwickeln von Python-Code mehrere Dateien bearbeiten, können Sie die autoreload
Erweiterung aktivieren, alle importierten Module automatisch neu zu laden, sodass der Befehl diese Bearbeitungen ausführt. Verwenden Sie die folgenden Befehle in einer beliebigen Notizbuchzelle oder Python-Datei, um die autoreload
Erweiterung zu aktivieren:
%load_ext autoreload
%autoreload 2
Die autoreload
Erweiterung funktioniert nur im Spark-Treiberprozess und lädt code nicht in Spark-Executorprozesse neu. Da sie nur auf dem Spark-Treiberknoten und nicht auf Knoten funktioniert, die den Spark-Executor ausführen, sollten Sie beim Entwickeln von Modulen, die auf Arbeitsknoten (z. B. UDFs) ausgeführt werden, nicht verwendet autoreload
werden.
In Databricks Runtime 16.0 und höher fügt die autoreload
Erweiterung in Databricks die folgenden Features hinzu:
- Unterstützung für gezieltes Erneutes Laden von Modulen für Interne Änderungen an Funktionen. Durch erneutes Erneutes Laden des geänderten Teils eines Moduls wird sichergestellt, dass nur eine extern sichtbare Instanz jedes Objekts vorhanden ist, das sicherer und zuverlässiger ist.
- Wenn Sie ein Python-Modul aus einer Arbeitsbereichsdatei importieren, schlägt Databricks automatisch vor, zu verwenden
autoreload
, ob sich das Modul seit dem letzten Import geändert hat.
Weitere Informationen zur autoreload
Erweiterung finden Sie in der Dokumentation zum Autoreload von IPython.
Umgestalten von Code
Eine bewährte Methode für die Codeentwicklung besteht darin, Code so zu modularisieren, dass er leicht wiederverwendet werden kann. Sie können benutzerdefinierte Python-Dateien mithilfe von Arbeitsbereichsdateien erstellen und den Code in diesen Dateien mithilfe der „import
“-Anweisung für ein Notebook verfügbar machen.
So gestalten Sie Notebookcode in wiederverwendbare Dateien um:
- Erstellen Sie eine neue Quellcodedatei für Ihren Code.
- Fügen Sie dem Notebook Python-Importanweisungen hinzu, um den Code in Ihrer neuen Datei für das Notebook verfügbar zu machen.
Migrieren von %run
-Befehlen
Wenn Sie %run
-Befehle verwenden, um die in einem Notebook definierten Python- oder R-Funktionen für ein anderes Notebook verfügbar zu machen oder Sie benutzerdefinierte .whl
-Dateien in einem Cluster installieren möchten, sollten Sie diese benutzerdefinierten Module als Arbeitsbereichsdateien einschließen. Auf diese Weise können Sie Ihre Notizbücher und andere Codemodule synchron halten und sicherstellen, dass Ihr Notizbuch immer die richtige Version verwendet.
%run
Mit Befehlen können Sie ein Notizbuch in ein anderes einfügen und häufig verwendet werden, um die Unterstützung von Python- oder R-Code für ein Notizbuch verfügbar zu machen. In diesem Beispiel enthält ein Notebook mit dem Namen power.py
den unten dargestellten Code.
# 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)
Anschließend können Sie mit einem %run
-Befehl die in power.py
definierten Funktionen für ein anderes Notebook verfügbar machen:
# This notebook uses a %run command to access the code in "power.py".
%run ./power
n_to_mth(3, 4)
Mithilfe von Arbeitsbereichsdateien können Sie das Modul, das den Python-Code enthält, direkt importieren und die Funktion ausführen.
from power import n_to_mth
n_to_mth(3, 4)
Umgestalten von Python-.whl
-Dateien in relative Bibliotheken
Sie können benutzerdefinierte .whl
-Dateien auf einen Cluster importieren und sie anschließend in ein an diesen Cluster angefügtes Notebook importieren. Dieser Prozess ist jedoch möglicherweise umständlich und fehleranfällig für häufig aktualisierte Code. Mit Arbeitsbereichsdateien können Sie diese Python-Dateien im selben Verzeichnis wie die Notizbücher, die den Code verwenden, beibehalten, um sicherzustellen, dass Ihr Notizbuch immer die richtige Version verwendet.
Weitere Informationen zum Verpacken von Python-Projekten finden Sie in diesem Tutorial.
Verwenden des Azure Databricks-Webterminals zu Testzwecken
Sie können das Azure Databricks-Webterminal verwenden, um Änderungen an Ihrem Python- oder R-Code zu testen, ohne ein Notizbuch zum Importieren und Ausführen der Datei zu verwenden.
- Öffnen Sie das Webterminal.
- Wechseln Sie in das Verzeichnis:
cd /Workspace/Users/<path-to-directory>/
. - Führen Sie die Python- oder R-Datei aus:
python file_name.py
oderRscript file_name.r
.