All Products
Search
Document Center

MaxCompute:Lingkungan runtime PyODPS DataFrame

Last Updated:Jul 02, 2025

Saat menggunakan PyODPS DataFrame untuk mengembangkan aplikasi data, menjalankan kode di lingkungan berbeda dapat menyebabkan masalah tak terduga. Topik ini menjelaskan cara mengidentifikasi lingkungan runtime dan menyelesaikan masalah dalam skenario tertentu.

Ikhtisar

PyODPS adalah paket Python, bukan implementasi Python. PyODPS berjalan di lingkungan Python, sehingga perilakunya identik dengan interpreter Python biasa. Kode berikut menunjukkan prinsip operasi dan lingkungan runtime PyODPS.

  • Kode Contoh

    from odps import ODPS, options
    import numpy as np
    
    o = ODPS(...)
    df = o.get_table('pyodps_iris').to_df()
    
    coeffs = [0.1, 0.2, 0.4]
    
    def handle(v):
        import numpy as np
        return float(np.cosh(v)) * sum(coeffs)
    
    options.df.supersede_libraries = True
    val = df.sepal_length.map(handle).sum().execute(libraries=['numpy.zip', 'other.zip'])
    print(np.sinh(val))
  • Sistem Eksekusi Kode

    Gambar berikut menunjukkan sistem-sistem yang terlibat saat kode contoh dieksekusi. Kode tersebut dieksekusi di luar MaxCompute. Dalam topik ini, sistem-sistem tersebut disebut sebagai sistem on-premises.image.png

  • Analisis Kode

    • Referensi Paket Pihak Ketiga

      Semua kode contoh kecuali kode fungsi HANDLE dieksekusi pada sistem on-premises. Perhatikan bahwa fungsi HANDLE dilewatkan ke metode MAP tetapi tidak dieksekusi. Oleh karena itu, perilaku eksekusi kode contoh serupa dengan perilaku eksekusi kode Python biasa. Saat sebuah paket pihak ketiga diimpor, paket on-premises dirujuk. Dalam kode contoh, paket other.zip yang dirujuk dalam libraries=['numpy.zip', 'other.zip'] tidak diinstal pada sistem on-premises. Jadi, jika kode berisi pernyataan seperti import other, kesalahan akan dilaporkan. Masalah ini juga terjadi meskipun paket other.zip diunggah ke MaxCompute sebagai sumber daya karena paket other.zip tidak ada di sistem on-premises. Secara teori, jika tidak ada paket PyODPS yang terlibat dalam kode yang dieksekusi pada sistem on-premises, masalah ini bukan disebabkan oleh PyODPS. Dalam hal ini, Anda harus memeriksa kode untuk pemecahan masalah.

    • Fungsi HANDLE

      Jika backend MaxCompute digunakan saat fungsi HANDLE dilewatkan ke metode MAP, fungsi HANDLE diproses dalam beberapa fase berikut:

      1. Modul cloudpickle mengekstrak closure dan bytecode.

      2. PyODPS DataFrame menggunakan closure dan bytecode untuk menghasilkan fungsi yang ditentukan pengguna (UDF) Python, kemudian mengirimkan UDF ke MaxCompute.

      3. Jika Anda menjalankan pekerjaan di MaxCompute menggunakan pernyataan SQL, Python UDF yang dihasilkan dipanggil, bytecode dan konten closure dalam UDF di-unpickle, dan kemudian UDF dieksekusi di executor MaxCompute.

    • Ringkasan

      • Kode dalam tubuh fungsi HANDLE dieksekusi di executor MaxCompute, bukan di sistem on-premises.

      • Paket yang diinstal di sistem on-premises tidak dapat dirujuk dalam tubuh fungsi HANDLE. Hanya paket di executor MaxCompute yang dapat dirujuk.

      • Paket pihak ketiga yang diunggah harus terintegrasi dengan Python 2.7, yang menggunakan UCS-2, di executor MaxCompute.

      • Jika Anda memodifikasi variabel eksternal yang dirujuk, seperti coeffs dalam kode contoh, dalam tubuh fungsi HANDLE, nilai variabel di sistem on-premises dipertahankan.

      • Jika Anda merujuk paket dalam tubuh fungsi HANDLE, dan paket tersebut diimpor di luar fungsi HANDLE, kesalahan mungkin dilaporkan. Ini karena modul cloudpickle mengirimkan referensi paket on-premises ke executor MaxCompute tetapi struktur paket mungkin tidak didukung oleh executor MaxCompute. Oleh karena itu, kami sarankan Anda mengimpor paket dalam tubuh fungsi HANDLE.

      • Jika kode file lain dirujuk dalam tubuh fungsi HANDLE, paket tempat file tersebut milik harus ada di executor MaxCompute. Jika Anda tidak ingin menyelesaikan masalah menggunakan paket pihak ketiga, simpan semua kode pribadi yang dirujuk dalam satu file yang sama.

Ringkasan sebelumnya tentang fungsi HANDLE dapat diterapkan ke metode kustom dan kelas agregat yang dirujuk dalam fungsi apply, map_reduce, dan agregat kustom. Jika Anda menggunakan backend pandas, semua kode berjalan di sistem on-premises. Oleh karena itu, Anda harus menginstal paket terkait di sistem on-premises. Namun, setelah debugging di backend pandas, kode ditransfer ke MaxCompute untuk dijalankan. Dalam hal ini, kami sarankan Anda mematuhi aturan backend MaxCompute untuk pengembangan saat menginstal paket di sistem on-premises.

Menggunakan paket pihak ketiga

  • Komputer pribadi atau server on-premises: Untuk menggunakan kode dalam paket pihak ketiga, instal paket tersebut pada versi Python yang diperlukan.

  • Notebook: Untuk menggunakan kode dalam paket pihak ketiga, hubungi penyedia platform untuk dukungan teknis.

  • DataWorks: Menginstal paket pihak ketiga tidak didukung di sistem on-premises. Namun, Anda dapat merujuk paket pihak ketiga di DataWorks. Anda dapat membaca file lain dan menjalankan perintah exec untuk menggunakan kode dalam file lain di sistem on-premises. Untuk informasi lebih lanjut, lihat Gunakan node PyODPS untuk merujuk paket pihak ketiga.

    Penting
    • Struktur Direktori di DataStudio bukan struktur direktori aktual dalam sistem file. Jika Anda mengimpor atau membuka jalur file yang ditampilkan di DataStudio, eksekusi gagal.

    • Setelah mengunggah sumber daya di DataWorks, klik Submit untuk memastikan bahwa sumber daya diunggah ke MaxCompute.

    • Jika Anda ingin menggunakan versi NumPy kustom Anda sendiri, tentukan odps.df.supersede_libraries = True dalam kode saat mengunggah paket wheel yang diperlukan. Pastikan Anda menggunakan nama paket NumPy sebagai parameter pertama untuk parameter libraries.

Merujuk data di tabel MaxCompute lain

  • Komputer pribadi, server on-premises, Notebook, atau DataWorks: Akses tabel MaxCompute menggunakan kode on-premises. Jika Anda dapat mengakses titik akhir, gunakan PyODPS atau DataFrame untuk mengakses tabel MaxCompute. Jika tidak dapat mengakses titik akhir, hubungi penyedia platform untuk dukungan teknis.

  • Fungsi map, apply, map_reduce, dan agregat kustom: Executor MaxCompute tidak mendukung akses ke titik akhir atau titik akhir Tunnel, dan tidak ada paket PyODPS yang tersedia. Oleh karena itu, Anda tidak dapat langsung menggunakan objek entri ODPS atau PyODPS DataFrame untuk mengakses tabel MaxCompute lain. Anda tidak dapat melewatkan objek-objek ini dari luar UDF. Jika tabel tidak berisi banyak data, kami sarankan Anda menentukan DataFrame sebagai sumber daya. Untuk informasi lebih lanjut, lihat Merujuk Sumber Daya. Jika tabel berisi banyak data, kami sarankan Anda menggabungkan tabel.