Afhankelijkheden van declaratieve Automation-bundelsbibliotheek

Op deze pagina wordt de syntaxis beschreven voor het declareren van dependencies van de Declarative Automation Bundles-bibliotheek. Bundels maken programmatisch beheer van Databricks-resources mogelijk. Zie Wat zijn Declarative Automation Bundles?

Naast notebooks en bronbestanden zijn uw taken, pijplijnen en andere workloads waarschijnlijk afhankelijk van bibliotheken. Bibliotheekafhankelijkheden worden gedeclareerd in uw bundelconfiguratiebestanden.

Bundels bieden ondersteuning voor de volgende bibliotheekafhankelijkheden:

  • Python wheel-bestand
  • JAR-bestand (Java of Scala)
  • PyPI-, Maven- of CRAN-pakketten

Voor Python kunt u ook afhankelijkheden opgeven in een pyproject.toml-bestand en deze opnemen in uw bundel. Zie uv en pyproject.toml.

Notitie

Of een bibliotheek wordt ondersteund, is afhankelijk van de clusterconfiguratie en de bibliotheekbron. Zie Bibliotheken installeren voor volledige informatie over bibliotheekondersteuning.

Python wheel-bestand

Als u een Python wielbestand wilt toevoegen aan een taaktaak, geeft u in libraries een whl toewijzing op voor elke bibliotheek die moet worden geïnstalleerd. U kunt een wielbestand installeren vanuit werkruimtebestanden, Unity Catalog-volumes, cloudobjectopslag of een lokaal bestandspad.

Belangrijk

Bibliotheken kunnen worden geïnstalleerd vanuit DBFS wanneer u Databricks Runtime 14.3 LTS en hieronder gebruikt. Elke werkruimtegebruiker kan echter bibliotheekbestanden wijzigen die zijn opgeslagen in DBFS. Om de beveiliging van bibliotheken in een Azure Databricks werkruimte te verbeteren, wordt het opslaan van bibliotheekbestanden in de DBFS-hoofdmap afgeschaft en standaard uitgeschakeld in Databricks Runtime 15.1 en hoger. Zie Opslaan van bibliotheken in dbFS-hoofdmap is afgeschaft en standaard uitgeschakeld.

In plaats daarvan raadt Databricks aan om alle bibliotheken, waaronder Python-bibliotheken, JAR-bestanden en Spark-connectors, te uploaden naar werkruimtebestanden of Unity Catalog-volumes, of gebruik te maken van opslagplaatsen voor bibliotheekpakketten. Als uw workload deze patronen niet ondersteunt, kunt u ook bibliotheken gebruiken die zijn opgeslagen in de opslag van cloudobjecten.

In het volgende voorbeeld ziet u hoe u drie Python wielbestanden voor een taaktaak installeert.

  • Het eerste Python wielbestand is eerder geüpload naar de Azure Databricks werkruimte of toegevoegd als een include-item in de syncmapping en bevindt zich in dezelfde lokale map als het bundelconfiguratiebestand.
  • Het tweede Python wielbestand bevindt zich op de opgegeven locatie van werkruimtebestanden in de Azure Databricks werkruimte.
  • Het derde Python wielbestand is eerder geüpload naar het volume met de naam my-volume in de Azure Databricks werkruimte.
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

JAR-bestand (Java of Scala)

Voeg een JAR-bestand toe aan een taak door in libraries een jar toewijzing op te geven voor elke bibliotheek die moet worden geïnstalleerd. U kunt een JAR installeren vanuit Unity Catalog-volumes, cloudobjectopslag of een lokaal bestandspad.

Belangrijk

Bibliotheken kunnen worden geïnstalleerd vanuit DBFS wanneer u Databricks Runtime 14.3 LTS en hieronder gebruikt. Elke werkruimtegebruiker kan echter bibliotheekbestanden wijzigen die zijn opgeslagen in DBFS. Om de beveiliging van bibliotheken in een Azure Databricks werkruimte te verbeteren, wordt het opslaan van bibliotheekbestanden in de DBFS-hoofdmap afgeschaft en standaard uitgeschakeld in Databricks Runtime 15.1 en hoger. Zie Opslaan van bibliotheken in dbFS-hoofdmap is afgeschaft en standaard uitgeschakeld.

In plaats daarvan raadt Databricks aan om alle bibliotheken, waaronder Python-bibliotheken, JAR-bestanden en Spark-connectors, te uploaden naar werkruimtebestanden of Unity Catalog-volumes, of gebruik te maken van opslagplaatsen voor bibliotheekpakketten. Als uw workload deze patronen niet ondersteunt, kunt u ook bibliotheken gebruiken die zijn opgeslagen in de opslag van cloudobjecten.

In het volgende voorbeeld ziet u hoe u een JAR-bestand installeert dat eerder is geüpload naar het volume met de naam my-volume in de Azure Databricks werkruimte.

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

Zie Bundel die een JAR-bestand uploadt naar Unity Catalog, bijvoorbeeld de configuratie waarmee het JAR-bestand wordt gebouwd en geïmplementeerd. Zie voor een zelfstudie waarin een bundelproject wordt gemaakt dat een Scala JAR bouwt en implementeert, Een Scala JAR bouwen met behulp van Declaratieve Automation-bundels.

PyPI-pakket

Als u een PyPI-pakket wilt toevoegen aan een taakdefinitie, specificeert u in libraries een pypi toewijzing voor elk PyPI-pakket dat moet worden geïnstalleerd. Geef voor elke koppeling het volgende op:

  • packageGeef de naam op van het PyPI-pakket dat moet worden geïnstalleerd. Er wordt ook een optionele exacte versiespecificatie ondersteund.
  • Geef eventueel voor repode opslagplaats op waar het PyPI-pakket kan worden gevonden. Als dit niet is opgegeven, wordt de standaardindex pip gebruikt (https://pypi.org/simple/).

In het volgende voorbeeld ziet u hoe u twee PyPI-pakketten installeert.

  • Het eerste PyPI-pakket maakt gebruik van de opgegeven pakketversie en de standaardindex pip .
  • Het tweede PyPI-pakket maakt gebruik van de opgegeven pakketversie en de expliciet opgegeven pip index.
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/

Maven-pakket

Als u een Maven-pakket wilt toevoegen aan een taakdefinitie, in libraries, specificeert u een maven mapping voor elk Maven-pakket dat moet worden geïnstalleerd. Geef voor elke koppeling het volgende op:

  • coordinatesGeef voor het pakket de Maven-coördinaten in Gradle-stijl op.
  • Geef desgewenst repode Maven-opslagplaats op waaruit het Maven-pakket moet worden geïnstalleerd. Als u dit weglaat, worden zowel de centrale Maven-opslagplaats als de Spark Packages-opslagplaats doorzocht.
  • Optioneel, geef exclusions eventuele afhankelijkheden aan die expliciet moeten worden uitgesloten. Zie Uitsluitingen van Maven-afhankelijkheid.

In het volgende voorbeeld ziet u hoe u twee Maven-pakketten installeert.

  • Het eerste Maven-pakket maakt gebruik van de opgegeven pakketcoördinaten en zoekt naar dit pakket in zowel de Centrale Opslagplaats van Maven als de Opslagplaats voor Spark-pakketten.
  • Het tweede Maven-pakket maakt gebruik van de opgegeven pakketcoördinaten, zoekt alleen naar dit pakket in de Centrale Opslagplaats van Maven en bevat geen van de afhankelijkheden van dit pakket die overeenkomen met het opgegeven patroon.
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

Notitie

uv is de aanbevolen methode voor het beheren van Python bibliotheekafhankelijkheden. Zie uv en pyproject.toml.

Python bibliotheekafhankelijkheden kunnen ook worden opgegeven in een requirements*.txt-bestand dat is opgenomen als onderdeel van de taakdefinitie van de taak. Het pad naar het bestand kan een lokaal pad, een werkruimtepad of een Unity Catalog-volumepad zijn.

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

uv en pyproject.toml

Als u Python bibliotheekafhankelijkheden wilt opnemen met behulp van uv, geeft u deze op in het bestand pyproject.toml dat deel uitmaakt van de bundel en definieert u vervolgens een omgevingsafhankelijkheid om ze op te nemen. Zie uv voor meer informatie.

Een voorbeeld van een pyproject.toml bestand dat numpy als afhankelijkheid toevoegt:

[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

Bewerk nu de configuratie van uw bundelresource om elke afhankelijkheid op te nemen die is gedefinieerd in de pyproject.toml door een bewerkbare omgeving toe te voegen die verwijst naar de map waar pyproject.toml is geïmplementeerd. Dit is te zien in de volgende voorbeeldpijplijnconfiguratie:

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}

Bundelartefacten bouwen met behulp van uv:

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