All Products
Search
Document Center

MaxCompute:PyODPS

Last Updated:May 28, 2026

PyODPS adalah SDK Python untuk MaxCompute yang menyediakan antarmuka Python untuk menulis pekerjaan MaxCompute, melakukan kueri terhadap tabel dan tampilan (views), serta mengelola resource. PyODPS mendukung unggah dan unduh file, pembuatan tabel, kueri SQL, pengiriman pekerjaan MapReduce, serta fungsi yang ditentukan pengguna (user-defined functions/UDFs).

Fitur

Alat yang didukung

PyODPS dapat dijalankan di lingkungan lokal, DataWorks, dan Notebook PAI.

Penting

Hindari mengunduh seluruh data ke mesin lokal untuk tugas PyODPS karena dapat menyebabkan error kehabisan memori (out-of-memory/OOM). Kirimkan tugas ke MaxCompute untuk eksekusi terdistribusi. Penting: Jangan mengunduh seluruh data ke mesin lokal untuk menjalankan PyODPS.

Penting: Jangan mengunduh seluruh data ke mesin lokal untuk menjalankan PyODPS

PyODPS berjalan di berbagai klien, termasuk PC, node PyODPS DataWorks, dan lingkungan Notebook PAI.PyODPS environment PyODPS menyediakan operasi seperti unduh melalui saluran data (tunnel download), execute, dan to_pandas yang menarik data ke mesin lokal. Pengguna baru sering kali menarik data secara lokal, memprosesnya, lalu mengunggahnya kembali — pendekatan ini tidak efisien karena melewati kemampuan komputasi terdistribusi MaxCompute.

Metode pemrosesan data

Deskripsi

Contoh skenario

Pemrosesan lokal (tidak disarankan, risiko OOM)

Node PyODPS DataWorks adalah kontainer klien dengan sumber daya terbatas yang telah dilengkapi paket PyODPS bawaan. Kontainer ini tidak menggunakan sumber daya komputasi MaxCompute dan memiliki batasan memori yang ketat.

Antarmuka to_pandas mengonversi data MaxCompute menjadi DataFrame Pandas. Gunakan hanya untuk data skala kecil dalam pengembangan dan pengujian lokal. Untuk set data besar, antarmuka ini mengunduh seluruh data secara lokal, melewati komputasi paralel MaxCompute, dan berisiko menyebabkan error kehabisan memori (OOM).

Eksekusi terdistribusi di MaxCompute (disarankan)

Gunakan DataFrame terdistribusi PyODPS untuk mengirimkan tugas yang intensif komputasi ke MaxCompute, bukan memprosesnya di node klien lokal.

Catatan

Untuk mengonversi hasil SQL menjadi DataFrame, simpan hasil tersebut ke tabel MaxCompute dengan sintaksis CREATE TABLE AS SELECT ..., lalu konversikan.

Gunakan map atau apply dalam DataFrame PyODPS untuk pemrosesan tingkat baris, seperti mentransformasi baris atau membagi satu baris menjadi beberapa baris. Menggunakan fungsi yang ditentukan pengguna.

Operasi-operasi ini diterjemahkan ke SQL untuk komputasi terdistribusi di MaxCompute, mengonsumsi memori lokal yang minimal dengan peningkatan performa signifikan dibandingkan pemrosesan single-machine.

Contoh tokenisasi berikut membandingkan kedua metode tersebut.

  • Contoh skenario

    Seorang pengguna menganalisis string log harian dari tabel string satu kolom. Tujuannya adalah melakukan tokenisasi kalimat bahasa Tionghoa dengan pustaka jieba, menemukan kata kunci, lalu menyimpan hasilnya ke tabel baru.

  • Demo kode pemrosesan tidak efisien

    import jieba
    t = o.get_table('word_split')
    out = []
    with t.open_reader() as reader:
        for r in reader:
            words = list(jieba.cut(r[0]))
            #
            # Logika pemrosesan untuk menghasilkan processed_data
            #
            out.append(processed_data)
    out_t = o.get_table('words')
    with out_t.open_writer() as writer:
        writer.write(out)

    Pendekatan single-machine ini membaca, memproses, dan menulis data baris per baris. Siklus unduh-unggah lambat dan memakan banyak memori. Di node DataWorks, pekerjaan sering mengalami error OOM karena memori default yang terbatas.

  • Demo kode pemrosesan efisien

    from odps.df import output
    out_table = o.get_table('words')
    df = o.get_table('word_split').to_df()
    
    # Asumsikan bidang dan tipe yang dikembalikan adalah sebagai berikut
    out_names = ["word", "count"]
    out_types = ["string", "int"]
    
    @output(out_names, out_types)
    def handle(row):
        import jieba
        words = list(jieba.cut(row[0]))
        #
        # Logika pemrosesan untuk menghasilkan processed_data
        #
        yield processed_data
    df.apply(handle, axis=1).persist(out_table.name)

    Gunakan apply untuk menerapkan eksekusi terdistribusi:

    • Fungsi handle diserialisasi dan dieksekusi di sisi server sebagai UDF. Logika inti pemrosesan baris per baris tetap sama, tetapi MaxCompute mengeksekusinya secara paralel di beberapa mesin.

    • Antarmuka persist menulis output langsung ke tabel MaxCompute, sehingga semua data tetap berada di dalam kluster dan menghemat bandwidth serta memori lokal.

    • MaxCompute mendukung paket pihak ketiga seperti jieba dalam UDF, sehingga Anda dapat memanfaatkan komputasi terdistribusi dengan perubahan kode yang minimal.

Batasan