Freigeben über


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 verwenden, folgt Databricks einer festgelegten Rangfolge, falls mehrere Bibliotheken mit demselben Namen vorhanden sind. 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 in einer beliebigen Notebook-Zelle oder Python-Datei die folgenden Befehle verwenden, um das erneute Laden aller Module zu erzwingen:

%load_ext autoreload
%autoreload 2

Beachten Sie, dass das automatische erneute Laden nur für den Treiber funktioniert und dass kein Code in den Executor für UDFs erneut geladen wird.

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:

  1. Erstellen Sie eine neue Quellcodedatei für Ihren Code.
  2. 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 Notebooks und andere Codemodule synchron halten, um sicherzustellen, dass Ihr Notebook immer die richtige Version verwendet.

Mit %run-Befehlen können Sie ein Notebook in ein anderes einschließen. Sie werden häufig verwendet, um unterstützenden Python- oder R-Code für ein Notebook 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. Für Code, der häufig aktualisiert wird, ist dieser Prozess unter Umständen fehleranfällig und umständlich. Mit Arbeitsbereichsdateien können Sie diese Python-Dateien im gleichen Verzeichnis wie die Notebooks speichern, die den Code verwenden, und so sicherstellen, dass Ihr Notebook 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 die Datei in ein Notebook importieren und das Notebook ausführen zu müssen.

  1. Öffnen Sie das Webterminal.
  2. Wechseln Sie in das Verzeichnis: cd /Workspace/Users/<path-to-directory>/.
  3. Führen Sie die Python- oder R-Datei aus: python file_name.py oder Rscript file_name.r.