Sdílet prostřednictvím


Konfigurace balíčku v Pythonu

Podpora Pythonu pro sady prostředků Databricks rozšiřuje sady prostředků Databricks o další funkce, které se vztahují během nasazování sady prostředků, abyste mohli:

Referenční dokumentace pro podporu Pythonu pro balíček Databricks Asset Bundles databricks-bundles je k dispozici na adrese https://databricks.github.io/cli/python/.

Požadavky

Pokud chcete použít podporu Pythonu pro sady prostředků Databricks, musíte nejprve:

  1. Nainstalujte rozhraní příkazového řádku Databricks verze 0.275.0 nebo vyšší. Viz Instalace nebo aktualizace rozhraní příkazového řádku Databricks.

  2. Ověřte se v pracovním prostoru Databricks, pokud jste to ještě neudělali:

    databricks configure
    
  3. Nainstalujte uv. Viz Instalace uv. Python for Databricks Asset Bundles používá uv k vytvoření virtuálního prostředí a instalaci požadovaných závislostí. Případně můžete prostředí Pythonu nakonfigurovat pomocí jiných nástrojů, jako je venv.

Vytvoření projektu ze šablony

Pokud chcete vytvořit novou podporu Pythonu pro projekt Databricks Asset Bundles, inicializujete sadu pomocí pydabs šablony:

databricks bundle init pydabs

Po zobrazení výzvy zadejte název projektu, například my_pydabs_projecta přijměte zahrnutí poznámkového bloku a balíčku Pythonu.

Teď ve složce nového projektu vytvořte nové virtuální prostředí:

cd my_pydabs_project
uv sync

Ve výchozím nastavení šablona obsahuje příklad úlohy definované jako Python v resources/my_pydabs_project_job.py souboru:

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",
                },
            },
        ],
    },
)

Funkce Job.from_dict přijímá slovník Pythonu se stejným formátem jako YAML. Prostředky lze také vytvořit pomocí syntaxe třídy data:

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",
            ),
        ),
    ],
)

Soubory Pythonu se načtou prostřednictvím vstupního bodu zadaného v oddílu python v 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'

Ve výchozím nastavení resources/__init__.py obsahuje funkci, která načte všechny Pythonové soubory v balíčku prostředků.

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()

Nasazení a spouštění úloh nebo kanálů

Pokud chcete balíček nasadit do cíle vývoje, použijte příkaz bundle deploy z kořenového adresáře projektu balíčku.

databricks bundle deploy --target dev

Tento příkaz nasadí vše definované pro projekt sady. Například projekt vytvořený pomocí výchozí šablony nasadí úlohu volanou [dev yourname] my_pydabs_project_job do pracovního prostoru. Tuto úlohu najdete tak, že přejdete do úloh a kanálů v pracovním prostoru Databricks.

Po nasazení sady můžete pomocí příkazu souhrnu sady zkontrolovat vše, co je nasazené:

databricks bundle summary --target dev

Nakonec ke spuštění úlohy nebo pipeliny použijte příkaz bundle run:

databricks bundle run my_pydabs_project_job

Aktualizace existujících balíčků

Pokud chcete aktualizovat existující sady, modelujte strukturu šablony projektu, jak je popsáno v tématu Vytvoření projektu ze šablony. Existující sady prostředků s YAML je možné aktualizovat tak, aby zahrnovaly prostředky definované jako kód Pythonu přidáním oddílu python do 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'

Zadané virtuální prostředí musí obsahovat nainstalovaný balíček PyPi databricks-bundles .

pip install databricks-bundles==0.275.0

Složka prostředků musí obsahovat soubor __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()

Převod existujících úloh na Python

Pokud chcete převést existující úlohy do Pythonu, můžete použít funkci Zobrazit jako kód . Podívejte se na Zobrazit úlohy jako kód.

  1. Otevřete stránku pro existující úlohu v pracovním prostoru Databricks.

  2. Klikněte na ikonu nabídky Kebab vlevo od tlačítka Spustit nyní potom klikněte na Zobrazit jako kód:

    Zobrazit jako položku nabídky kódu

  3. Vyberte Python a pak sady prostředků Databricks.

    Zobrazit jako kód: Python

  4. Klikněte na Kopírovat a uložte vygenerovaný Python jako soubor Pythonu do složky prostředků projektu sady prostředků.

    Návod

    Můžete také zobrazit a zkopírovat YAML pro existující úlohy a kanály, které můžete vložit přímo do konfiguračních souborů YAML sady.

Vytváření prostředků pomocí metadat

Výchozí implementace load_resources funkce načte soubory Pythonu resources v balíčku. Python můžete použít k programovému vytváření prostředků. Můžete například načíst konfigurační soubory a vytvářet úlohy ve smyčce:

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

Proměnné sady accessových sad

Nahrazení balíčku a vlastní proměnné umožňují dynamické načítání hodnot, aby bylo možné určit nastavení v době, kdy je balíček nasazen a spuštěn na cílovém zařízení. Informace o proměnných sady naleznete v tématu Vlastní proměnné.

V Pythonu definujte proměnné a pak použijte bundle parametr pro přístup k nim. Viz @variables dekorátor, Proměnná, Sada a Prostředky.

from databricks.bundles.core import Bundle, Resources, Variable, variables

@variables
class Variables:
    # Define a variable
    warehouse_id: Variable[str]


def load_resources(bundle: Bundle) -> Resources:
    # Resolve the variable
    warehouse_id = bundle.resolve_variable(Variables.warehouse_id)

    ...

K proměnným je možné přistupovat také v Pythonu pomocí nahrazení.

sample_job = Job.from_dict(
    {
        "name": "sample_job",
        "tasks": [
            {
                "task_key": "my_sql_query_task",
                "sql_task": {
                    "warehouse_id": "${var.warehouse_id}",
                    "query": {
                        "query_id": "11111111-1111-1111-1111-111111111111",
                    },
    ...

Pomocí přepisů cíle nastavte hodnoty proměnných pro různé cíle nasazení.

Úprava prostředků definovaných v YAML nebo Pythonu

Pokud chcete upravit prostředky, můžete odkazovat na mutátorové funkce v databricks.yml, podobně jako funkce načítání prostředků. Tuto funkci lze použít nezávisle na načítání prostředků definovaných v Pythonu a upravuje prostředky definované jak v YAML, tak i v Pythonu.

Nejprve vytvořte mutators.py v kořenovém balíčku s následujícím obsahem:

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)

Teď pomocí následující konfigurace spusťte add_email_notifications funkci během nasazování sady prostředků. Tímto se aktualizuje každá úloha definovaná v sadě s e-mailovými oznámeními, pokud nejsou přítomna. Funkce mutátoru musí být zadány v databricks.ymla jsou prováděny v zadaném pořadí. Mutátory úloh se provádějí pro každou úlohu definovanou v sadě a můžou buď vrátit aktualizovanou kopii, nebo nemodifikovaný vstup. Mutátory se dají použít také pro jiná pole, jako je konfigurace výchozích clusterů úloh nebo SQL Warehouse.

python:
  mutators:
    - 'mutators:add_email_notifications'

Pokud funkce při provádění mutatoru vyvolá výjimku, nasazení sady se přeruší.

Návod

Pokud chcete nakonfigurovat přednastavení cílů (například zrušit pozastavení plánů cíle prod ), použijte režimy nasazení a přednastavení. Viz Vlastní předvolby.

Dodatečné zdroje