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
Skenario umum penggunaan PyODPS:
Alat yang didukung
PyODPS dapat dijalankan di lingkungan lokal, DataWorks, dan Notebook PAI.
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.
-
Lingkungan lokal: Instal dan gunakan PyODPS secara lokal. Menggunakan PyODPS di lingkungan lokal.
-
DataWorks: PyODPS telah dipra-instal pada node PyODPS DataWorks untuk mengembangkan dan menjadwalkan tugas. Menggunakan PyODPS dengan DataWorks.
-
Notebook PAI: Anda dapat menginstal dan menjalankan PyODPS di lingkungan Python PAI. PyODPS juga telah dipra-instal dalam image bawaan PAI, termasuk komponen Python kustom PAI-Designer. Penggunaannya mengikuti metode standar. Operasi dasar dan DataFrame (Tidak disarankan).
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 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 |
|
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
|
Gunakan 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
jiebadalam UDF, sehingga Anda dapat memanfaatkan komputasi terdistribusi dengan perubahan kode yang minimal.
-
Batasan
-
Batasan sandbox dapat mencegah program yang lolos pengujian di backend Pandas lokal agar tidak dapat dijalankan di MaxCompute.