Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Pakiety zasobów języka Python dla usługi Databricks rozszerzają pakiety zasobów usługi Databricks , dzięki czemu można wykonywać następujące czynności:
- Zdefiniuj zasoby w kodzie języka Python. Te definicje mogą współistnieć z zasobami zdefiniowanymi w języku YAML.
- Dynamiczne tworzenie zasobów przy użyciu metadanych. Zobacz Tworzenie zasobów przy użyciu metadanych.
- Modyfikowanie zasobów zdefiniowanych w języku YAML lub Python podczas wdrażania pakietu. Zobacz Modyfikowanie zasobów zdefiniowanych w języku YAML lub Python.
Dokumentacja referencyjna dotycząca obsługi Pythona dla pakietu databricks-bundles usługi Databricks jest dostępna pod adresem https://databricks.github.io/cli/python/.
Wymagania
Aby korzystać z obsługi języka Python dla pakietów zasobów usługi Databricks, musisz najpierw:
Zainstaluj interfejs wiersza polecenia usługi Databricks w wersji 0.275.0 lub nowszej. Zobacz Instalowanie lub aktualizowanie interfejsu wiersza poleceń Databricks.
Uwierzytelnij się w obszarze roboczym usługi Databricks, jeśli jeszcze tego nie zrobiono:
databricks configureZainstaluj uv. Zobacz Instalowanie uv. Pakiety zasobów Databricks w języku Python wykorzystują uv do tworzenia środowiska wirtualnego i instalowania niezbędnych zależności. Alternatywnie możesz skonfigurować środowisko języka Python przy użyciu innych narzędzi, takich jak venv.
Tworzenie projektu na podstawie szablonu
Aby utworzyć nową obsługę Pythona dla projektu Zestawów Zasobów Databricks, zainicjuj pakiet przy użyciu szablonu pydabs :
databricks bundle init pydabs
Po wyświetleniu monitu nadaj projektowi nazwę, taką jak my_pydabs_project, i zaakceptuj dołączenie notesu i pakietu języka Python.
Teraz utwórz nowe środowisko wirtualne w nowym folderze projektu:
cd my_pydabs_project
uv sync
Domyślnie szablon zawiera przykład zadania zdefiniowanego jako Python w resources/my_pydabs_project_job.py pliku:
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",
},
},
],
},
)
Funkcja Job.from_dict akceptuje słownik języka Python przy użyciu tego samego formatu co YAML. Zasoby można również tworzyć przy użyciu składni klasy danych:
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",
),
),
],
)
Pliki języka Python są ładowane za pośrednictwem punktu wejścia określonego w sekcji python w databricks.yml:
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'
Domyślnie zawiera funkcję, resources/__init__.py która ładuje wszystkie pliki języka Python w pakiecie zasobów.
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()
Wdrażanie i uruchamianie zadań lub potoków
Aby wdrożyć pakiet do środowiska deweloperskiego, użyj polecenia bundle deploy z katalogu głównego projektu pakietu.
databricks bundle deploy --target dev
To polecenie umożliwia wdrożenie wszystkich elementów zdefiniowanych dla projektu pakietu. Na przykład projekt utworzony przy użyciu szablonu domyślnego wdraża zadanie o nazwie [dev yourname] my_pydabs_project_job w obszarze roboczym. Zadanie można znaleźć, przechodząc do Zadania i Potoki w obszarze roboczym Databricks.
Po wdrożeniu pakietu możesz użyć polecenia podsumowania pakietu , aby przejrzeć wszystkie wdrożone elementy:
databricks bundle summary --target dev
Na koniec, aby uruchomić zadanie lub potok, użyj polecenia bundle run:
databricks bundle run my_pydabs_project_job
Aktualizowanie istniejących pakietów
Aby zaktualizować istniejące pakiety, należy modelować strukturę szablonu projektu zgodnie z opisem w temacie Tworzenie projektu na podstawie szablonu. Istniejące pakiety z kodem YAML można zaktualizować w celu uwzględnienia zasobów zdefiniowanych jako kod języka Python, dodając sekcję python w pliku databricks.yml:
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'
Określone środowisko wirtualne musi zawierać zainstalowany pakiet PyPi databricks-bundles.
pip install databricks-bundles==0.275.0
Folder resources musi zawierać plik __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()
Konwertowanie istniejących zadań na język Python
Aby przekonwertować istniejące zadania na język Python, możesz użyć funkcji Wyświetl jako kod . Zobacz Wyświetlanie zadań jako kodu.
Otwórz stronę aktualnego zadania w środowisku pracy usługi Databricks.
Kliknij kebab po lewej stronie przycisku Uruchom teraz , a następnie kliknij pozycję Wyświetl jako kod:
Wybierz Python, a następnie Pakiety zasobów Databricks
Kliknij Kopiuj i zapisz wygenerowany plik Python w folderze resources projektu zbiorczego.
Wskazówka
Możesz również wyświetlać i kopiować kod YAML dla istniejących zadań i potoków, które można wkleić bezpośrednio do plików YAML konfiguracji pakietu.
Tworzenie zasobów przy użyciu metadanych
Domyślna implementacja load_resources funkcji ładuje pliki języka Python w pakiecie resources . Język Python umożliwia programowe tworzenie zasobów. Można na przykład załadować pliki konfiguracji i utworzyć zadania w pętli:
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
Zmienne pakietu programu Access
Parametr bundle może być używany do uzyskiwania dostępu do zmiennych pakietu i celu wdrożenia.
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)
...
Aby uzyskać więcej informacji, zobacz dokumentację klasy Resources oraz Bundle.
Modyfikowanie zasobów zdefiniowanych w języku YAML lub Python
Można odwoływać się do funkcji mutatora w databricks.yml, podobnie jak do funkcji ładujących zasoby. Ta funkcja może być używana niezależnie od ładowania zasobów zdefiniowanych w języku Python i modyfikowania zasobów definiowanych zarówno w YAML, jak i w Pythonie.
Najpierw utwórz mutators.py w katalogu głównym pakietu z następującą zawartością.
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)
Teraz użyj następującej konfiguracji, aby wykonać add_email_notifications funkcję podczas wdrażania pakietu. Aktualizuje każde zadanie zdefiniowane w pakiecie, dodając powiadomienia e-mail, jeśli ich brakuje. Funkcje mutatora muszą być określone w elemencie databricks.yml i wykonywane są w określonej kolejności. Mutatory zadań są wykonywane dla każdego zadania zdefiniowanego w pakiecie i mogą zwracać zaktualizowaną kopię lub niezmodyfikowane dane wejściowe. Mutatory mogą być również używane w innych polach, takich jak konfigurowanie domyślnych klastrów zadań lub magazynów SQL.
python:
mutators:
- 'mutators:add_email_notifications'
Jeśli funkcje zgłaszają wyjątek podczas wykonywania mutatora, wdrożenie pakietu zostanie przerwane.