Condividi tramite


Dipendenze della libreria dei bundle di automazione dichiarativa

Questa pagina descrive la sintassi per dichiarare le dipendenze della libreria dei bundle di automazione dichiarativa. I bundle consentono la gestione a livello di codice delle risorse di Databricks. Vedere Che cosa sono i bundle di automazione dichiarativa?.

Oltre ai notebook e ai file di origine, i tuoi processi, le pipeline e altri carichi di lavoro dipenderanno probabilmente dalle librerie. Le dipendenze della libreria vengono dichiarate nei file di configurazione del bundle.

I pacchetti forniscono supporto per le dipendenze della libreria riportate di seguito:

  • file wheel di Python
  • File JAR (Java o Scala)
  • Pacchetti PyPI, Maven o CRAN

Per Python, puoi anche specificare le dipendenze in un file pyproject.toml e includerlo nel bundle. Vedere uv e pyproject.toml.

Nota

L'eventuale supporto di una libreria dipende dalla configurazione del cluster e dall'origine della libreria. Per informazioni complete sul supporto delle librerie, vedere Installare le librerie.

file wheel di Python

Per aggiungere un file wheel di Python a un compito di lavoro, in libraries specificare un mapping whl per ogni libreria da installare. È possibile installare un file wheel dai file dell'area di lavoro, dai volumi del catalogo Unity, dall'archiviazione di oggetti cloud o da un percorso di file locale.

Importante

Le librerie possono essere installate da DBFS quando si usa Databricks Runtime 14.3 LTS e versioni successive. Tuttavia, qualsiasi utente dell'area di lavoro può modificare i file di libreria archiviati in DBFS. Per migliorare la sicurezza delle librerie in un'area di lavoro Azure Databricks, l'archiviazione dei file di libreria nella radice DBFS è deprecata e disabilitata per impostazione predefinita in Databricks Runtime 15.1 e versioni successive. Vedi Archiviazione di librerie nella radice DBFS è deprecata e disabilitata per impostazione predefinita.

Invece, Databricks raccomanda di caricare tutte le librerie, comprese le librerie Python, i file JAR e i connettori Spark, nei file dell'area di lavoro o nei volumi del catalogo Unity, oppure di utilizzare i repository dei pacchetti di libreria. Se il carico di lavoro non supporta questi modelli, è anche possibile usare le librerie archiviate nell'archiviazione di oggetti cloud.

Nell'esempio seguente viene illustrato come installare tre file wheel Python per un'attività di lavoro.

  • Il primo file wheel di Python è stato caricato in precedenza nell'area di lavoro Azure Databricks o aggiunto come elemento include nel syncmapping ed è nella stessa cartella locale del file di configurazione del bundle.
  • Il secondo file Python wheel si trova nella posizione specificata dei file dell'area di lavoro nell'area di lavoro Azure Databricks.
  • Il terzo file wheel Python è stato caricato in precedenza nel volume denominato my-volume nell'area di lavoro Azure Databricks.
resources:
  jobs:
    my_job:
      # ...
      tasks:
        - task_key: my_task
          # ...
          libraries:
            - whl: ./my-wheel-0.1.0.whl
            - whl: /Workspace/Shared/Libraries/my-wheel-0.0.1-py3-none-any.whl
            - whl: /Volumes/main/default/my-volume/my-wheel-0.1.0.whl

file JAR (Java o Scala)

Per aggiungere un file JAR a un'attività di processo, specificare libraries un jar mapping per ogni libreria da installare. È possibile installare un file JAR dai volumi del catalogo Unity, dall'archiviazione di oggetti cloud o da un percorso di file locale.

Importante

Le librerie possono essere installate da DBFS quando si usa Databricks Runtime 14.3 LTS e versioni successive. Tuttavia, qualsiasi utente dell'area di lavoro può modificare i file di libreria archiviati in DBFS. Per migliorare la sicurezza delle librerie in un'area di lavoro Azure Databricks, l'archiviazione dei file di libreria nella radice DBFS è deprecata e disabilitata per impostazione predefinita in Databricks Runtime 15.1 e versioni successive. Vedi Archiviazione di librerie nella radice DBFS è deprecata e disabilitata per impostazione predefinita.

Invece, Databricks raccomanda di caricare tutte le librerie, comprese le librerie Python, i file JAR e i connettori Spark, nei file dell'area di lavoro o nei volumi del catalogo Unity, oppure di utilizzare i repository dei pacchetti di libreria. Se il carico di lavoro non supporta questi modelli, è anche possibile usare le librerie archiviate nell'archiviazione di oggetti cloud.

Nell'esempio seguente viene illustrato come installare un file JAR caricato in precedenza nel volume denominato my-volume nell'area di lavoro Azure Databricks.

resources:
  jobs:
    my_job:
      # ...
      tasks:
        - task_key: my_task
          # ...
          libraries:
            - jar: /Volumes/main/default/my-volume/my-java-library-1.0.jar

Ad esempio, la configurazione che compila e distribuisce il file JAR, vedere Bundle che carica un file JAR in Unity Catalog. Per un'esercitazione che crea un progetto bundle che compila e distribuisce un JAR Scala, vedere Creare un JAR Scala utilizzando bundle di Automazione Dichiarativa.

Pacchetto PyPI

Per aggiungere un pacchetto PyPI a una definizione di attività del processo, in libraries specificare un pypi mapping per ogni pacchetto PyPI da installare. Per ogni mappatura, specificare quanto segue:

  • Per packagespecificare il nome del pacchetto PyPI da installare. È supportata anche una specifica di versione esatta facoltativa.
  • Facoltativamente, per repospecificare il repository in cui è possibile trovare il pacchetto PyPI. Se non specificato, viene usato l'indice predefinito pip (https://pypi.org/simple/).

L'esempio seguente illustra come installare due pacchetti PyPI.

  • Il primo pacchetto PyPI usa la versione del pacchetto specificata e l'indice predefinito pip .
  • Il secondo pacchetto PyPI usa la versione del pacchetto specificata e l'indice specificato in modo esplicito pip .
resources:
  jobs:
    my_job:
      # ...
      tasks:
        - task_key: my_task
          # ...
          libraries:
            - pypi:
                package: wheel==0.41.2
            - pypi:
                package: numpy==1.25.2
                repo: https://pypi.org/simple/

Pacchetto Maven

Per aggiungere un pacchetto Maven a una definizione di attività di processo, in librariesspecificare un'associazione maven per ciascun pacchetto Maven da installare. Per ogni mappatura, specificare quanto segue:

  • Per coordinates, specificare le coordinate Maven in stile Gradle per il pacchetto.
  • Facoltativamente, per repospecificare il repository Maven da cui installare il pacchetto Maven. Se omesso, vengono eseguite ricerche sia nel repository centrale Maven che nel repository dei pacchetti Spark.
  • Facoltativamente, per exclusionsspecificare eventuali dipendenze da escludere in modo esplicito. Consulta Esclusioni delle dipendenze Maven.

Nell'esempio seguente viene illustrato come installare due pacchetti Maven.

  • Il primo pacchetto Maven usa le coordinate del pacchetto specificate e cerca questo pacchetto sia nel repository centrale Maven che nel repository dei pacchetti Spark.
  • Il secondo pacchetto Maven usa le coordinate del pacchetto specificate, cerca questo pacchetto solo nel repository centrale Maven e non include alcuna delle dipendenze di questo pacchetto che corrispondono al modello specificato.
resources:
  jobs:
    my_job:
      # ...
      tasks:
        - task_key: my_task
          # ...
          libraries:
            - maven:
                coordinates: com.databricks:databricks-sdk-java:0.8.1
            - maven:
                coordinates: com.databricks:databricks-dbutils-scala_2.13:0.1.4
                repo: https://mvnrepository.com/
                exclusions:
                  - org.scala-lang:scala-library:2.13.0-RC*

Python requirements.txt

Nota

uv è il metodo consigliato per la gestione delle dipendenze della libreria Python. Vedere uv e pyproject.toml.

Le dipendenze della libreria Python possono essere specificate anche in un file requirements*.txt incluso come parte della definizione del compito del job. Il percorso del file può essere un percorso locale, un percorso dell'area di lavoro o un percorso del volume del catalogo Unity.

resources:
  jobs:
    my_job:
      # ...
      tasks:
        - task_key: my_task
          # ...
          libraries:
            - requirements: ./local/path/requirements.txt

uv e pyproject.toml

Per includere le dipendenze della libreria Python usando uv, specificarle nel file pyproject.toml che fa parte del bundle e quindi definire una dipendenza dell'ambiente per includerle. Per altre informazioni su uv, vedere Introduzione all'uv.

Ad esempio, il file seguente pyproject.toml aggiunge numpy come dipendenza:

[project]
name = "test"
version = "0.0.1"
authors = [{ name = "someone@example.com" }]
requires-python = ">=3.10,<3.13"
dependencies = [
    # Any dependencies for jobs and pipelines in this project can be added here
    #
    # LIMITATION: for pipelines, dependencies are cached during development;
    # add dependencies to the 'environment' section of your pipeline.yml file instead

    "numpy==1.25.2"
]

[dependency-groups]
dev = [
    "pytest",
    "ruff",
    "databricks-dlt",
    "databricks-connect>=15.4,<15.5",
    "ipykernel",
]

[project.scripts]
main = "test.main:main"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.ruff]
line-length = 120

Modificare ora la configurazione della risorsa bundle per includere tutte le dipendenze definite in pyproject.toml aggiungendo un ambiente modificabile che punta alla cartella in cui pyproject.toml viene distribuita, ad esempio in questa configurazione della pipeline di esempio:

resources:
  pipelines:
    test_uv_etl:
      name: test_uv_etl
      catalog: ${var.catalog}
      schema: ${var.schema}
      serverless: true
      root_path: '../src/test_uv_etl'

      libraries:
        - glob:
            include: ../src/test_uv_etl/transformations/**

      environment:
        dependencies:
          - --editable ${workspace.file_path}

Per compilare artefatti bundle usando uv:

# databricks.yml
...
artifacts:
  python_artifact:
    type: whl
    build: uv build --wheel
...