Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dukungan Python untuk Bundel Aset Databricks memperluas Bundel Aset Databricks dengan kemampuan tambahan yang berlaku selama penyebaran bundel sehingga Anda dapat:
Tentukan sumber daya dalam kode Python. Definisi ini dapat berdampingan dengan sumber daya yang ditentukan dalam YAML.
Buat sumber daya secara dinamis selama penyebaran bundel menggunakan metadata. Lihat Membuat sumber daya menggunakan metadata.
Ubah sumber daya yang ditentukan dalam YAML atau Python selama penyebaran bundel. Lihat Mengubah sumber daya yang ditentukan dalam YAML atau Python.
Petunjuk / Saran
Anda juga dapat memodifikasi sumber daya bundel saat runtime menggunakan fitur seperti if/else condition_task atau for_each_task untuk pekerjaan.
Dokumentasi referensi untuk dukungan Python terhadap paket Databricks Asset Bundles databricks-bundles tersedia di https://databricks.github.io/cli/python/.
Persyaratan
Untuk menggunakan dukungan Python untuk Bundel Aset Databricks, Anda harus terlebih dahulu:
Instal Databricks CLI, versi 0.275.0 atau lebih tinggi. Lihat Menginstal atau memperbarui Databricks CLI.
Autentikasi ke ruang kerja Databricks Anda jika Anda belum melakukannya:
databricks configurePasang uv. Lihat Menginstal uv. Python untuk Bundel Aset Databricks menggunakan uv untuk membuat lingkungan virtual dan menginstal dependensi yang diperlukan. Atau, Anda dapat mengonfigurasi lingkungan Python menggunakan alat lain seperti venv.
Membuat proyek dari templat
Untuk membuat dukungan Python baru untuk proyek Bundel Aset Databricks, inisialisasi bundel menggunakan pydabs templat:
databricks bundle init pydabs
Saat diminta, beri nama proyek Anda, seperti my_pydabs_project, dan terima penyertaan buku catatan dan paket Python.
Sekarang buat lingkungan virtual baru di folder proyek baru Anda:
cd my_pydabs_project
uv sync
Secara default, templat menyertakan contoh pekerjaan yang didefinisikan sebagai Python dalam resources/my_pydabs_project_job.py file:
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",
},
},
],
},
)
Fungsi ini Job.from_dict menerima kamus Python menggunakan format yang sama dengan YAML. Sumber daya juga dapat dibangun menggunakan sintaks kelas 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",
),
),
],
)
File Python dimuat melalui titik masuk yang ditentukan di bagian python di 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'
Secara default, resources/__init__.py berisi fungsi yang memuat semua file Python dalam paket sumber daya.
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()
Menyebarkan dan menjalankan pekerjaan atau alur
Untuk menyebarkan bundel ke target pengembangan, gunakan perintah penyebaran bundel dari akar proyek bundel:
databricks bundle deploy --target dev
Perintah ini menerapkan semua yang ditentukan untuk proyek bundel. Misalnya, proyek yang dibuat menggunakan templat default menyebarkan pekerjaan yang dipanggil [dev yourname] my_pydabs_project_job ke ruang kerja Anda. Anda dapat menemukan tugas tersebut dengan menavigasi ke
Setelah bundel disebarkan, Anda dapat menggunakan perintah ringkasan bundel untuk meninjau semua yang disebarkan:
databricks bundle summary --target dev
Terakhir, untuk menjalankan tugas atau pipeline, gunakan perintah bundle run:
databricks bundle run my_pydabs_project_job
Memperbarui bundel yang ada
Untuk memperbarui bundel yang ada, buat model struktur templat proyek seperti yang dijelaskan dalam Membuat proyek dari templat. Bundel yang ada dengan YAML dapat diperbarui untuk menyertakan sumber daya yang didefinisikan sebagai kode Python dengan menambahkan python bagian di 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'
Lingkungan virtual yang ditentukan harus berisi paket PyPi databricks-bundles yang diinstal.
pip install databricks-bundles==0.275.0
Folder sumber daya harus berisi __init__.py file:
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()
Mengonversi pekerjaan yang ada menjadi Python
Untuk mengonversi pekerjaan yang ada menjadi Python, Anda dapat menggunakan fitur Tampilkan sebagai kode . Lihat Menampilkan pekerjaan sebagai kode.
Buka halaman untuk pekerjaan yang sudah ada di workspace Databricks.
Klik
kebab di sebelah kiri tombol Jalankan sekarang , lalu klik Tampilkan sebagai kode:
Pilih Python, lalu Bundel Aset Databricks
Klik Salin dan simpan Python yang dihasilkan sebagai file Python di folder sumber daya proyek bundel.
Petunjuk / Saran
Anda juga dapat melihat dan menyalin YAML untuk tugas dan pipeline yang ada yang dapat Anda tempelkan langsung ke file YAML konfigurasi bundel Anda.
Membuat sumber daya menggunakan metadata
Implementasi default fungsi load_resources memuat file Python dalam resources paket. Anda dapat menggunakan Python untuk membuat sumber daya secara terprogram. Misalnya, Anda dapat memuat file konfigurasi dan membuat tugas di dalam perulangan.
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
Variabel bundel akses
Substitusi bundel dan variabel kustom memungkinkan pengambilan nilai dinamis sehingga pengaturan dapat ditentukan pada saat bundel disebarkan dan dijalankan pada target. Untuk informasi tentang variabel bundel, lihat Variabel kustom.
Di Python, tentukan variabel, lalu gunakan bundle parameter untuk mengaksesnya. Lihat @variables dekorator, Variabel, Bundel, dan Sumber Daya.
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)
...
Variabel juga dapat diakses di Python menggunakan substitusi.
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",
},
...
Gunakan penggantian target untuk mengatur nilai variabel untuk target penyebaran yang berbeda.
Mengubah sumber daya yang ditentukan dalam YAML atau Python
Untuk memodifikasi sumber daya, Anda dapat mereferensikan fungsi mutator di databricks.yml, mirip dengan fungsi yang memuat sumber daya. Fitur ini dapat digunakan secara independen dari pemuatan sumber daya yang ditentukan dalam Python dan memodifikasi sumber daya yang ditentukan baik dalam YAML maupun Python.
Pertama, buat mutators.py di akar bundel dengan konten berikut:
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)
Sekarang gunakan konfigurasi berikut untuk menjalankan fungsi add_email_notifications selama penerapan bundel. Ini memperbarui setiap pekerjaan yang ditentukan dalam bundel dengan menambahkan pemberitahuan email jika pemberitahuan tersebut belum ada. Fungsi mutator harus ditentukan dalam databricks.yml, dan dijalankan dalam urutan yang ditentukan. Mutator tugas dijalankan untuk setiap tugas yang ditentukan dalam paket dan dapat mengembalikan salinan yang diperbarui atau input yang tidak dimodifikasi. Mutator juga dapat digunakan untuk bidang lain, seperti mengonfigurasi kluster pekerjaan default atau gudang SQL.
python:
mutators:
- 'mutators:add_email_notifications'
Jika fungsi melemparkan pengecualian selama eksekusi mutator, penyebaran bundel dibatalkan.
Petunjuk / Saran
Untuk mengonfigurasi prasetel untuk target (misalnya, untuk membatalkan jeda jadwal untuk prod target), gunakan mode penyebaran dan prasetel. Lihat preset kustom .