All Products
Search
Document Center

MaxCompute:Layanan pengemasan otomatis

Last Updated:Mar 26, 2026

Mengelola dependensi Python pihak ketiga dalam pekerjaan MaxFrame terdistribusi biasanya mengharuskan Anda mengunggah paket secara manual ke MaxCompute sebelum setiap eksekusi. Layanan pengemasan otomatis menghilangkan langkah ini: cukup deklarasikan dependensi Anda dalam kode menggunakan with_python_requirements, dan MaxFrame akan menyelesaikan serta mengemasnya secara otomatis saat waktu proses.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Memiliki sesi MaxFrame yang terhubung ke MaxCompute.

  • (Jika menggunakan klien MaxFrame on-premises) SDK MaxFrame versi V0.1.0b5 atau lebih baru. Lihat Persiapan untuk instruksi penyiapan.

Cara kerja

  1. Hiasi UDF Anda dengan @with_python_requirements, mencantumkan paket yang dibutuhkan oleh fungsi Anda.

  2. Saat pekerjaan dijalankan, MaxFrame menyelesaikan paket yang terdaftar dari PyPI dan mengemasnya ke dalam lingkungan pekerjaan.

  3. Pada eksekusi berikutnya, jika hasil pengemasan sudah ada dalam cache, MaxFrame melewati proses pengemasan ulang.

Pengemasan dipicu pada eksekusi pertama. Jika cache dihapus (sumber daya temporary dihapus setiap hari ketika force_rebuild=False), MaxFrame akan melakukan pengemasan ulang secara otomatis pada eksekusi berikutnya, yang menambah latensi.

Deklarasikan dependensi dengan with_python_requirements

Decorator with_python_requirements merupakan titik masuk untuk layanan pengemasan otomatis.

def with_python_requirements(
    *requirements: str,
    force_rebuild: bool = False,
    prefer_binary: bool = False,
    pre_release: bool = False,
): ...

Parameter

`requirements` (wajib)

Satu atau lebih spesifikasi paket dependensi, mengikuti sintaksis PEP 508—format yang sama dengan yang digunakan pip.

@with_python_requirements("scikit_learn>1.0", "xgboost>1.0")

`force_rebuild` (opsional, default: False)

Mengontrol apakah MaxFrame melakukan pengemasan ulang dependensi yang sudah ada dalam cache.

NilaiPerilaku
False (default)Lewati pengemasan ulang jika hasil cache tersedia. Paket yang di-cache disimpan sebagai sumber daya temporary dan dihapus setiap hari.
TrueSelalu lakukan pengemasan ulang menggunakan versi gambar terbaru dari PyPI. Hasilnya disimpan sebagai sumber daya jangka panjang dan tidak dihapus secara otomatis.

Untuk pengembangan dan pengujian iteratif, pertahankan nilai default False. Gunakan force_rebuild=True ketika Anda ingin memaksa peningkatan ke versi paket terbaru dan menyimpan hasilnya sebagai sumber daya jangka panjang.

Dengan force_rebuild=False, sumber daya temporary dihapus setiap hari. Jika cache dihapus di antara dua eksekusi, MaxFrame akan melakukan pengemasan ulang secara otomatis, yang menambah latensi pada eksekusi berikutnya.

`prefer_binary` (opsional, default: False)

Mengontrol apakah MaxFrame lebih memilih file wheel biner yang telah dikompilasi daripada distribusi sumber.

NilaiPerilaku
False (default)Tidak ada preferensi; pip menyelesaikan paket terbaik secara normal.
TrueLebih memilih wheel biner, setara dengan memberikan opsi --prefer-binary ke pip.
Memilih wheel biner dapat mempercepat proses pengemasan, tetapi versi yang dipilih mungkin bukan rilis terbaru.

`pre_release` (opsional, default: False)

Mengontrol apakah versi paket pra-rilis (alpha atau beta) memenuhi syarat untuk dikemas.

NilaiPerilaku
False (default)Hanya rilis stabil yang dikemas.
TrueRilis alpha dan beta juga disertakan.

Contoh

Contoh berikut menggunakan with_python_requirements untuk menyuntikkan jieba, cloudpickle, dan pandas ke dalam pekerjaan apply DataFrame.

import os
import maxframe.dataframe as md
from maxframe import new_session
from maxframe.udf import with_python_requirements
from odps import ODPS

# Inisialisasi klien ODPS.
# Muat kredensial dari variabel lingkungan — hindari hardcoding ID AccessKey
# dan Rahasia AccessKey dalam kode Anda.
o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='your-default-project',
    endpoint='your-end-point',
)

session = new_session(o)

data = [["abcd"], ["efgh"], ["ijkl"], ["mno"]]
md_df = md.DataFrame(data, columns=["col1"])

# Deklarasikan dependensi. MaxFrame akan mengemasnya secara otomatis saat waktu proses.
@with_python_requirements("jieba==0.40 cloudpickle pandas")
def process(row):
    import jieba
    row["col1"] = row["col1"] + "_" + jieba.__version__
    return row

md_result = (
    md_df.apply(
        process,
        axis=1,
        result_type="expand",
        output_type="dataframe",
        dtypes=md_df.dtypes.copy(),
    )
    .execute()
    .fetch()
)

Ganti placeholder berikut dengan nilai aktual Anda:

PlaceholderDeskripsi
your-default-projectNama proyek MaxCompute Anda
your-end-pointTitik akhir MaxCompute Anda

FAQ

Kapan pengemasan terjadi?

Pengemasan dipicu pada awal eksekusi pekerjaan pertama. Jika hasil pengemasan sudah ada dalam cache, MaxFrame melewati pengemasan ulang dan pekerjaan langsung dimulai.

Apa yang terjadi jika paket yang di-cache dihapus sebelum eksekusi berikutnya?

Dengan force_rebuild=False, paket yang di-cache disimpan sebagai sumber daya temporary dan dihapus setiap hari. Jika dihapus sebelum eksekusi berikutnya, MaxFrame akan melakukan pengemasan ulang secara otomatis. Hal ini menambah latensi pada eksekusi tersebut tetapi tidak menyebabkan pekerjaan gagal.

Bagaimana cara memastikan versi paket terbaru digunakan di setiap eksekusi?

Atur force_rebuild=True. MaxFrame akan melakukan pengemasan ulang menggunakan versi gambar terbaru dari PyPI dan menyimpan hasilnya sebagai sumber daya jangka panjang yang tidak dihapus secara otomatis.