Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Python für Databricks Asset Bundles erweitert Databricks Asset Bundles so, dass Sie:
- Definieren sie Ressourcen im Python-Code. Diese Definitionen können mit ressourcen koexistieren, die in YAML definiert sind.
- Dynamisches Erstellen von Ressourcen mithilfe von Metadaten. Siehe "Erstellen von Ressourcen mithilfe von Metadaten".
- Ändern Sie ressourcen, die in YAML oder Python während der Bundlebereitstellung definiert sind. Siehe Ändern von Ressourcen, die in YAML oder Python definiert sind.
Referenzdokumentation für die Python-Unterstützung für Databricks Asset Bundles databricks-bundles package ist unter https://databricks.github.io/cli/python/.
Anforderungen
Um python-Unterstützung für Databricks Asset Bundles zu verwenden, müssen Sie zuerst:
Installieren Sie databricks CLI, Version 0.275.0 oder höher. Weitere Informationen finden Sie unter Installieren oder Aktualisieren der Databricks CLI.
Authentifizieren Sie sich bei Ihrem Databricks-Arbeitsbereich, wenn Sie dies noch nicht getan haben:
databricks configureInstallieren Sie uv. Siehe Installieren von UV. Python für Databricks Asset Bundles verwendet uv, um eine virtuelle Umgebung zu erstellen und die erforderlichen Abhängigkeiten zu installieren. Alternativ können Sie Ihre Python-Umgebung mit anderen Tools wie venv konfigurieren.
Erstellen eines Projekts aus der Vorlage
Um eine neue Python-Unterstützung für das Projekt "Databricks Asset Bundles" zu erstellen, initialisieren Sie ein Bündel mithilfe der pydabs Vorlage:
databricks bundle init pydabs
Wenn Sie dazu aufgefordert werden, geben Sie Ihrem Projekt einen Namen, wie my_pydabs_project, und akzeptieren Sie die Aufnahme eines Notebooks und eines Python-Pakets.
Erstellen Sie nun eine neue virtuelle Umgebung in Ihrem neuen Projektordner:
cd my_pydabs_project
uv sync
Standardmäßig enthält die Vorlage ein Beispiel für einen Auftrag, der in der resources/my_pydabs_project_job.py Datei als Python definiert ist:
from databricks.bundles.jobs import Job
my_pydabs_project_job = Job.from_dict(
{
"name": "my_pydabs_project_job",
"tasks": [
{
"task_key": "notebook_task",
"notebook_task": {
"notebook_path": "src/notebook.ipynb",
},
},
],
},
)
Die Job.from_dict Funktion akzeptiert ein Python-Wörterbuch mit demselben Format wie YAML. Ressourcen können auch mithilfe der Datenklassensyntax erstellt werden:
from databricks.bundles.jobs import Job, Task, NotebookTask
my_pydabs_project_job = Job(
name="my_pydabs_project_job",
tasks=[
Task(
task_key="notebook_task",
notebook_task=NotebookTask(
notebook_path="src/notebook.ipynb",
),
),
],
)
Python-Dateien werden durch einen Einstiegspunkt geladen, der im python-Abschnitt in databricks.yml angegeben ist.
python:
# Activate the virtual environment before loading resources defined in
# Python. If disabled, it defaults to using the Python interpreter
# available in the current shell.
venv_path: .venv
# Functions called to load resources defined in Python.
# See resources/__init__.py
resources:
- 'resources:load_resources'
Enthält standardmäßig eine Funktion, resources/__init__.py die alle Python-Dateien im Ressourcenpaket lädt.
from databricks.bundles.core import (
Bundle,
Resources,
load_resources_from_current_package_module,
)
def load_resources(bundle: Bundle) -> Resources:
"""
'load_resources' function is referenced in databricks.yml and is responsible for loading
bundle resources defined in Python code. This function is called by Databricks CLI during
bundle deployment. After deployment, this function is not used.
"""
# the default implementation loads all Python files in 'resources' directory
return load_resources_from_current_package_module()
Bereitstellen und Ausführen von Aufträgen oder Pipelines
Um das Bundle im Entwicklungsziel bereitzustellen, verwenden Sie den Befehl "Bundle bereitstellen " aus dem Stammverzeichnis des Bundleprojekts:
databricks bundle deploy --target dev
Mit diesem Befehl werden alle für das Bundleprojekt definierten Elemente bereitgestellt. Beispielsweise wird bei einem Projekt, das mit der Standardvorlage erstellt wird, ein Auftrag namens [dev yourname] my_pydabs_project_job in Ihrem Arbeitsbereich bereitgestellt. Sie finden diesen Auftrag, indem Sie in Ihrem Databricks-Arbeitsbereich zu Aufträgen und Pipelines navigieren.
Nachdem das Bundle bereitgestellt wurde, können Sie den Zusammenfassungsbefehl des Bundles verwenden, um alles zu überprüfen, was bereitgestellt wird:
databricks bundle summary --target dev
Um einen Auftrag oder eine Pipeline auszuführen, verwenden Sie schließlich den Befehl zum Ausführen des Bundles:
databricks bundle run my_pydabs_project_job
Aktualisieren vorhandener Bundles
Um vorhandene Bündel zu aktualisieren, modellieren Sie die Projektvorlagenstruktur wie unter Erstellen eines Projekts aus einer Vorlage beschrieben. Vorhandene Pakete mit YAML können aktualisiert werden, um Ressourcen einzuschließen, die als Python-Code definiert wurden, indem sie einen python-Abschnitt in databricks.yml hinzufügen.
python:
# Activate the virtual environment before loading resources defined in
# Python. If disabled, it defaults to using the Python interpreter
# available in the current shell.
venv_path: .venv
# Functions called to load resources defined in Python.
# See resources/__init__.py
resources:
- 'resources:load_resources'
Die angegebene virtuelle Umgebung muss das installierte "databricks-bundles PyPi"-Paket enthalten.
pip install databricks-bundles==0.275.0
Der Ressourcenordner muss eine Datei enthalten __init__.py :
from databricks.bundles.core import (
Bundle,
Resources,
load_resources_from_current_package_module,
)
def load_resources(bundle: Bundle) -> Resources:
"""
'load_resources' function is referenced in databricks.yml and
is responsible for loading bundle resources defined in Python code.
This function is called by Databricks CLI during bundle deployment.
After deployment, this function is not used.
"""
# default implementation loads all Python files in 'resources' folder
return load_resources_from_current_package_module()
Konvertieren vorhandener Aufträge in Python
Um vorhandene Aufträge in Python zu konvertieren, können Sie das Feature "Als Code anzeigen" verwenden. Siehe Anzeigen von Aufträgen als Code.
Öffnen Sie die Seite für den vorhandenen Job im Databricks-Arbeitsbereich.
Klicken Sie links neben der Schaltfläche " Jetzt ausführen " auf den Kebab, und klicken Sie dann auf "Als Code anzeigen":
Wählen Sie Python und dann Databricks Asset Bundles aus.
Klicken Sie auf "Kopieren ", und speichern Sie die generierte Python-Datei als Python-Datei im Ressourcenordner des Bundleprojekts.
Tipp
Sie können YAML auch für vorhandene Aufträge und Pipelines anzeigen und kopieren, die Sie direkt in Ihre Bündelkonfigurations-YAML-Dateien einfügen können.
Erstellen von Ressourcen mithilfe von Metadaten
Die Standardimplementierung der load_resources Funktion lädt Python-Dateien im resources Paket. Sie können Python verwenden, um Ressourcen programmgesteuert zu erstellen. Sie können beispielsweise Konfigurationsdateien laden und Aufträge in einer Schleife erstellen:
from databricks.bundles.core import (
Bundle,
Resources,
load_resources_from_current_package_module,
)
from databricks.bundles.jobs import Job
def create_job(country: str):
my_notebook = {
"task_key": "my_notebook",
"notebook_task": {
"notebook_path": "files/my_notebook.py",
},
}
return Job.from_dict(
{
"name": f"my_job_{country}",
"tasks": [my_notebook],
}
)
def load_resources(bundle: Bundle) -> Resources:
resources = load_resources_from_current_package_module()
for country in ["US", "NL"]:
resources.add_resource(f"my_job_{country}", create_job(country))
return resources
Zugriff auf Bündelvariablen
Der bundle Parameter kann für den Zugriff auf Bundlevariablen und das Bereitstellungsziel verwendet werden:
from databricks.bundles.core import Bundle, Resources, Variable, variables
@variables
class Variables:
warehouse_id: Variable[str]
def load_resources(bundle: Bundle) -> Resources:
warehouse_id = bundle.resolve_variable(Variables.warehouse_id)
...
Weitere Informationen finden Sie in der Ressourcen - und Bundle-Klassenreferenz .
Ändern von Ressourcen, die in YAML oder Python definiert sind
Sie können auf Mutatorfunktionen databricks.ymlverweisen , ähnlich wie Funktionen, die Ressourcen laden. Dieses Feature kann unabhängig vom Laden der in Python definierten Ressourcen verwendet werden und verändert Ressourcen, die sowohl in YAML als auch in Python definiert sind.
Erstellen Sie zunächst mutators.py im Stammverzeichnis des Bundle mit dem folgenden Inhalt:
from dataclasses import replace
from databricks.bundles.core import Bundle, job_mutator
from databricks.bundles.jobs import Job, JobEmailNotifications
@job_mutator
def add_email_notifications(bundle: Bundle, job: Job) -> Job:
if job.email_notifications:
return job
email_notifications = JobEmailNotifications.from_dict(
{
"on_failure": ["${workspace.current_user.userName}"],
}
)
return replace(job, email_notifications=email_notifications)
Verwenden Sie nun die folgende Konfiguration, um die add_email_notifications Funktion während der Bundlebereitstellung auszuführen. Dadurch wird jeder im Bundle definierte Auftrag mit E-Mail-Benachrichtigungen aktualisiert, wenn sie fehlen. Mutatorfunktionen müssen in databricks.yml angegeben und in der angegebenen Reihenfolge ausgeführt werden. Job-Mutatoren werden für jeden in einem Paket definierten Auftrag ausgeführt und können entweder eine aktualisierte Kopie oder den unveränderten Eingang zurückgeben. Mutatoren können auch für andere Felder verwendet werden, z. B. das Konfigurieren von Standardauftragsclustern oder SQL-Lagerhäusern.
python:
mutators:
- 'mutators:add_email_notifications'
Wenn Funktionen während der Mutatorausführung eine Ausnahme auslösen, wird die Bundlebereitstellung abgebrochen.