全部产品
Search
文档中心

MaxCompute:FAQ MaxFrame

更新时间:Dec 27, 2025

Topik ini menjelaskan error umum dalam MaxFrame.

Masalah 1: Error "invalid type INT for function UDF definition, you need to set odps.sql.type.system.odps2=true; to use it"

  • Penyebab: Error ini terjadi karena Anda menggunakan tipe data MaxCompute V2.0, tetapi versi tipe data MaxCompute V2.0 belum diaktifkan, sehingga pekerjaan gagal saat dieksekusi.

  • Solusi: Aktifkan tipe data MaxCompute V2.0 menggunakan flag berikut:

    from maxframe import config
    # Tambahkan ini sebelum new_session
    config.options.sql.settings = {
      "odps.sql.type.system.odps2": "true"
    }
    

Masalah 2: Error "UDF : No module named 'cloudpickle'"

  • Penyebab: Paket cloudpickle yang diperlukan tidak tersedia.

  • Solusi: Referensikan image dasar MaxCompute sebagai berikut:

    from maxframe import config
    # Tambahkan ini sebelum new_session
    config.options.sql.settings = {
      "odps.session.image": "common",
    }
    

Masalah 3: Cara menggunakan kembali resource dalam user-defined function (UDF) yang dikirimkan oleh DataFrame (apply)

Pada beberapa skenario user-defined function (UDF), Anda mungkin perlu membuat atau menghapus resource tertentu, seperti menginisialisasi koneksi database atau memuat model, dan ingin operasi tersebut hanya dilakukan sekali saat setiap UDF dimuat.

Untuk menggunakan kembali resource, Anda dapat memanfaatkan fitur Python di mana nilai default parameter fungsi hanya diinisialisasi sekali.

Sebagai contoh, pada UDF berikut, model hanya dimuat sekali:

def predict(s, _ctx={}):
  from ultralytics import YOLO
  # Nilai awal _ctx adalah dict kosong, yang hanya diinisialisasi sekali selama eksekusi Python.
  # Saat menggunakan model, periksa apakah model sudah ada di _ctx. Jika belum, muat dan simpan ke dalam dict tersebut.
  if not _ctx.get("model", None):
    model = YOLO(os.path.join("./", "yolo11n.pt"))
    _ctx["model"] = model
  model = _ctx["model"]

  # Kemudian, panggil API model yang relevan.
  

Contoh berikut menunjukkan UDF yang perlu menghapus resource dengan menggunakan kelas kustom bernama MyConnector untuk membuat dan menutup koneksi database:

class MyConnector:

  def __init__(self):
    # Buat koneksi database di __init__
    self.conn = create_connection()

  def __del__(self):
    # Tutup koneksi database di __del__
    try:
      self.conn.close()
    except:
      pass


def process(s, connector=MyConnector()):
  # Panggil langsung koneksi database di dalam connector. Anda tidak perlu membuat dan menutup koneksi lagi di dalam UDF.
  connector.conn.execute("xxxxx")
  
Catatan

Jumlah kali inisialisasi bergantung pada jumlah worker UDF. Setiap worker memiliki lingkungan Python terpisah. Misalnya, jika pemanggilan UDF memproses 100.000 baris data dan tugas tersebut ditugaskan ke 10 worker UDF, setiap worker memproses 10.000 baris. Dalam kasus ini, inisialisasi berjalan total 10 kali—sekali per worker.

Masalah 4: Cara memperbarui versi MaxFrame di kelompok sumber daya DataWorks (eksklusif dan tujuan umum)

Masalah 5: Praktik terbaik untuk menggunakan gambar kustom MaxFrame

Masalah 6: Error kueri "ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: java.lang.RuntimeException: sequence_row_id cannot be applied because of : no CMF"

Solusi: Tambahkan `index_col` ke kueri sebagai berikut:

df2=md.read_odps_table("tablename",index_col="cloumn").to_pandas()
df2=reset_index(inplace=True)

Masalah 7: Error "Cannot determine dtypes by calculating with enumerate data, please specify it as arguments" saat menggunakan metode dengan UDF, seperti apply

  • Penyebab: MaxFrame mencoba menginferensi tipe DataFrame atau Series yang dikembalikan oleh UDF untuk memeriksa dan membangun struktur data bagi perhitungan selanjutnya. Namun, dtypes mungkin tidak dapat ditentukan dengan benar dalam situasi berikut:

    • UDF tidak dapat dijalankan di lingkungan saat ini, misalnya karena ketergantungan pada gambar kustom, library pihak ketiga, atau parameter input yang salah.

    • Jika output_type ditentukan, tipe pengembalian aktual fungsi mungkin tidak sesuai dengan output_type yang dideklarasikan.

  • Solusi: Perbaiki kode atau tentukan `dtypes` secara eksplisit agar MaxFrame mengetahui tipe pengembalian UDF. Contohnya:

    • Untuk mengembalikan DataFrame yang berisi satu kolom int: df.apply(..., dtypes=pd.Series([np.int_]), output_type="dataframe")

    • Untuk mengembalikan DataFrame yang berisi dua kolom, A dan B: df.apply(..., dtypes={"A": np.int_, "B": np.str_}, output_type="dataframe")

    • Untuk mengembalikan Series bernama flag dengan tipe bool: df.apply(..., dtype="bool", name="flag", output_type="series")

Masalah 8: Cara menambahkan flag dengan cara yang sama seperti di SQL

from maxframe import config
config.options.sql.settings = {
    "odps.stage.mapper.split.size": "8",
    "odps.stage.joiner.num": "20"
}

Masalah 9: Cara mereferensikan paket pihak ketiga dalam pengembangan MaxFrame

Untuk informasi lebih lanjut, lihat Referensi paket dan gambar pihak ketiga.

from maxframe.udf import with_resources


@with_resources("resource_name")
def process(row):
    ...
    

Masalah 10: Error tugas "TypeError: Cannot accept arguments append_partitions"

Periksa versi PyODPS Anda. Masalah ini dapat diatasi dengan meningkatkan ke versi 0.12.0.

Masalah 11: Cara mengurai banyak bidang string JSON

SDK MaxFrame versi 1.0.0 dan yang lebih baru mendukung penguraian beberapa bidang string JSON sebagai berikut:

https://maxframe.readthedocs.io/en/latest/reference/dataframe/generated/maxframe.dataframe.Series.mf.flatjson.html

Masalah 12: ODPS-0010000: Fuxi job failed - Job failed for unknown reason, cannot get jobstatus

  • Penyebab: Instalasi dependensi gagal saat menggunakan metode seperti @with_python_requirements, sehingga pekerjaan tidak dapat dijalankan.

  • Penjelasan pesan error: ODPS-0010000: Fuxi job failed - Job failed for unknown reason, cannot get jobstatus

    Detail lebih lanjut dapat ditemukan di stderr Logview PythonPack, seperti kegagalan konektivitas jaringan berikut:

    Pesan error detail

    ...
      File "/root/.venv/lib/python3.11/site-packages/odps/models/instance.py", line 469, in _call_with_retry
        return utils.call_with_retry(func, **retry_kw)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/root/.venv/lib/python3.11/site-packages/odps/utils.py", line 996, in call_with_retry
        return func(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^
      File "/root/.venv/lib/python3.11/site-packages/odps/models/instance.py", line 556, in _get_resp
        return self._client.get(self.resource(), action="taskstatus")
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/root/.venv/lib/python3.11/site-packages/odps/rest.py", line 332, in get
        return self.request(url, "get", stream=stream, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/root/.venv/lib/python3.11/site-packages/odps/rest.py", line 213, in request
        return self._request(url, method, stream=stream, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/root/.venv/lib/python3.11/site-packages/odps/rest.py", line 310, in _request
        res = self.session.send(
              ^^^^^^^^^^^^^^^^^^
      File "/root/.venv/lib/python3.11/site-packages/requests/sessions.py", line 703, in send
        r = adapter.send(request, **kwargs)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/root/.venv/lib/python3.11/site-packages/requests/adapters.py", line 700, in send
        raise ConnectionError(e, request=request)
    requests.exceptions.ConnectionError: HTTPConnectionPool(host='service.cn-beijing-intranet.maxcompute.aliyun-inc.com', port=80): Max retries exceeded with url: /api/projects/odps_monitor_odps_cn_beijing_i/instances/20250620142836623g059jg5q8pk?taskstatus&curr_project=odps_monitor_odps_cn_beijing_i (Caused by NameResolutionError("<urllib3.connection.HTTPConnection object at 0x7f326dca0510>: Failed to resolve 'service.cn-beijing-intranet.maxcompute.aliyun-inc.com' ([Errno -2] Name or service not known)"))
    [2025-06-20 14:28:40,903 pythonpack.taskcaller WARNING] Set pack result: Unexpected error occurred, is_succeeded=False
    
  • Solusi:

    1. Ini adalah error internal PythonPack. Node yang melakukan packaging dan instalasi dependensi Pip mungkin sementara tidak dapat mengakses repositori dependensi. Coba ulang pekerjaan tersebut. Jika masalah tetap berlanjut, hubungi tim MaxFrame.

    2. Untuk pekerjaan periodik, simpan hasil packaging yang berhasil dari PythonPack guna memastikan stabilitas, lalu gunakan hasil tersebut pada pekerjaan harian berikutnya. Contohnya:

      from maxframe import options
      # Tetapkan hasil pythonpack ke prod. Dengan cara ini, pekerjaan berikutnya langsung menggunakan hasil pythonpack yang disimpan.
      options.pythonpack.task.settings = {"odps.pythonpack.production": "true"}
      

      Untuk mengabaikan cache, tambahkan force_rebuild=True di @with_python_requirements.

    3. Sebagai alternatif, hindari penggunaan PythonPack untuk menginstal dependensi. Lakukan packaging dependensi yang diperlukan secara offline, unggah sebagai resource MaxFrame, lalu referensikan dalam pekerjaan. MaxFrame secara otomatis menambahkan dependensi tersebut ke konteks callable.

      PyODPS-Pack adalah alat yang menyederhanakan proses ini. PyODPS-Pack secara otomatis memuat container Docker manylinux dengan lingkungan yang sama untuk packaging guna menghindari masalah kompatibilitas. Alat ini saat ini hanya berjalan di mesin Linux X86. Perangkat Apple dengan chip ARM seri M belum didukung.

      Untuk menggunakan resource MaxCompute di MaxFrame, gunakan @with_resources.

Masalah 13: ODPS-0123055:User script exception

  • Penyebab: Ini adalah jenis error paling umum dalam MaxFrame. Error ini terjadi selama eksekusi UDF di operator seperti apply, apply_chunk, flatmap, map, dan transform. Pesan error menunjukkan bahwa UDF yang dikirimkan melemparkan exception Python. Penyebab utamanya meliputi:

    • Kesalahan logika dalam kode. Tinjau logika tersebut.

    • Penanganan error tidak tepat sehingga melemparkan exception yang tidak tertangani. Pastikan blok try-except menangani semua exception yang mungkin terjadi.

    • UDF mengakses jaringan. Secara default, akses jaringan dinonaktifkan di kontainer UDF MaxCompute.

    • Tipe output yang dideklarasikan dengan `dtype` atau `dtypes` di operator tidak sesuai dengan tipe aktual yang dikembalikan oleh UDF.

    • UDF mereferensikan dependensi yang tidak tersedia di lingkungan runtime, sehingga kode pengguna tidak dapat dideserialisasi dengan benar.

  • Penjelasan pesan error:

    Sebagian besar error ODPS-0123055:User script exception merupakan exception Python. Anda dapat memeriksa stderr dari instans yang gagal.

    Sebagai contoh, menjalankan operasi pemuatan JSON pada string non-JSON menyebabkan error—masalah umum dalam pemrosesan data:

    def simple_failure(row):
        import json
    
        text = row["json_text"]
        data = json.loads(text)
        return data
    
    
    df = md.read_pandas(pd.DataFrame({"json_text": ["123", "456", "789"]}))
    df.apply(
        simple_failure, axis=1, dtypes={"text": np.str_}, output_type="dataframe"
    ).execute()
    

    Pesan error yang sesuai ditunjukkan di bawah ini. Pesan tersebut dengan jelas menunjukkan bahwa error terjadi di fungsi simple_failure pada baris 5, yaitu baris data = json.loads(text):

    ScriptError: ODPS-0123055: InstanceId: 20250622063246442gquihia95z2
    ODPS-0123055:User script exception - Traceback (most recent call last):
      File "/home/admin/mf_udf_ref_20250622062907997gvwps9irzzc_user_udf_139907101614080.py", line 130, in wrapped
        return func(self, *args, **kw)
               ^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/admin/mf_udf_ref_20250622062907997gvwps9irzzc_user_udf_139907101614080.py", line 262, in process
        for result in self.user_func(*args):
      File "/home/admin/mf_udf_ref_20250622062907997gvwps9irzzc_user_udf_139907101614080.py", line 230, in user_func_caller
        _user_function_results = _user_function(data, *_args, **_kw_args)
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/var/folders/_8/v9wr7xm54bz0rj5pl4p9dkww0000gn/T/ipykernel_18735/2599074506.py", line 5, in simple_failure
      File "/usr/ali/python3.11.7/lib/python3.11/json/__init__.py", line 346, in loads
        return _default_decoder.decode(s)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/ali/python3.11.7/lib/python3.11/json/decoder.py", line 337, in decode
        obj, end = self.raw_decode(s, idx=_w(s, 0).end())
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/ali/python3.11.7/lib/python3.11/json/decoder.py", line 355, in raw_decode
        raise JSONDecodeError("Expecting value", s, err.value) from None
    json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
     | fatalInstance: Odps/meta_dev_20250622063246442gquihia95z2_SQL_0_0_0_job_0/M1#0_0
    

    Jika fungsi dapat diserialisasi dengan benar, Anda biasanya dapat mengidentifikasi sumber error melalui jejak stack.

    Namun, jika UDF mereferensikan dependensi yang tidak tersedia di lingkungan runtime, fungsi tersebut tidak dapat diserialisasi dengan benar. Pesan error akan menunjukkan bahwa dependensi tidak ditemukan dan secara eksplisit mengidentifikasi objek atau dependensi penyebab kegagalan serialisasi, seperti pada contoh berikut:

    # Anggap xxhash diinstal secara lokal dan diimpor
    import xxhash
    
    
    def type_failure(row):
        # Referensikan xxhash di UDF
        return str(xxhash.xxh64("hello maxfrmae"))
    
    
    df = md.read_pandas(pd.DataFrame(np.random.randn(3, 5), columns=list("ABCDE")))
    df.apply(
        type_failure, axis=1, dtypes={"hash_value": np.str_}, output_type="dataframe"
    ).execute()
    

    Error tersebut menghasilkan stack exception berikut. MaxFrame gagal melakukan unpickle fungsi lokal selama runtime, dan pesan No module named 'xxhash' ditampilkan—ini adalah pesan error yang tepat:

    File "/home/admin/mf_udf_ref_20250622070426909g26q6zdfar2_user_udf_140362144866304.py", line 209, in __init__
    
        _user_function = cloudpickle.loads(base64.b64decode(b'gAWVnwIAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLBUsDQ1CXAHQBAAAAAAAAAAAAAHQCAAAAAAAAAAAAAKACAAAAAAAAAAAAAAAAAAAAAAAAAABkAaYBAACrAQAAAAAAAAAApgEAAKsBAAAAAAAAAABTAJROjA5oZWxsbyBtYXhmcm1hZZSGlIwDc3RylIwGeHhoYXNolIwFeHhoNjSUh5SMA3Jvd5SFlIxNL3Zhci9mb2xkZXJzL184L3Y5d3I3eG01NGJ6MHJqNXBsNHA5ZGt3dzAwMDBnbi9UL2lweWtlcm5lbF8xODczNS81NTM2OTIzNjYucHmUjAx0eXBlX2ZhaWx1cmWUaBJLBEMdgADdCw6Ndo98inzQHCzRDy3UDy3RCy7UCy7QBC6UQwCUKSl0lFKUfZQojAtfX3BhY2thZ2VfX5ROjAhfX25hbWVfX5SMCF9fbWFpbl9flHVOTk50lFKUjBxjbG91ZHBpY2tsZS5jbG91ZHBpY2tsZV9mYXN0lIwSX2Z1bmN0aW9uX3NldHN0YXRllJOUaBx9lH2UKGgZaBKMDF9fcXVhbG5hbWVfX5RoEowPX19hbm5vdGF0aW9uc19flH2UjA5fX2t3ZGVmYXVsdHNfX5ROjAxfX2RlZmF1bHRzX1+UTowKX19tb2R1bGVfX5RoGowHX19kb2NfX5ROjAtfX2Nsb3N1cmVfX5ROjBdfY2xvdWRwaWNrbGVfc3VibW9kdWxlc5RdlIwLX19nbG9iYWxzX1+UfZRoDGgAjAlzdWJpbXBvcnSUk5RoDIWUUpRzdYaUhlIwLg=='), buffers=[ ])
    
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^......
      File "/usr/ali/python3.11.7/lib/python3.11/site-packages/cloudpickle/cloudpickle.py", line 649, in subimport
        __import__(name)
    ModuleNotFoundError: No module named 'xxhash'
    
  • Bagian berikut menjelaskan kode error dan pesan untuk jenis error lainnya.

    • Tipe pengembalian salah:

      def type_failure(row):
          text = row["A"]
          # Mengembalikan float
          return text
      
      df = md.read_pandas(pd.DataFrame(np.random.randn(3, 5), columns=list("ABCDE")))
      
      # Deklarasikan bahwa fungsi mengembalikan DataFrame yang berisi kolom str bernama A
      df.apply(type_failure, axis=1, dtypes={"A": np.str_}, output_type="dataframe").execute()
      

      Pesan tersebut menunjukkan bahwa unicode (str) diharapkan, tetapi float diterima. Informasi ini biasanya ditentukan oleh `dtypes` atau `dtype`. Pastikan tipe yang dideklarasikan sesuai dengan tipe aktual yang dikembalikan oleh fungsi.

      ScriptError: ODPS-0123055: InstanceId: 202506220642291g87d6xot20d
      ODPS-0123055:User script exception - Traceback (most recent call last):
        File "/home/admin/mf_udf_ref_20250622062907997gvwps9irzzc_user_udf_139905326100480.py", line 130, in wrapped
          return func(self, *args, **kw)
                 ^^^^^^^^^^^^^^^^^^^^^^^
        File "/home/admin/mf_udf_ref_20250622062907997gvwps9irzzc_user_udf_139905326100480.py", line 263, in process
          self.forward(*result)
      TypeError: return value expected <class 'unicode'> but <class 'float'> found, value: 1.8263596267666997
       | fatalInstance: Odps/meta_dev_202506220642291g87d6xot20d_SQL_0_0_0_job_0/M1#0_0
      
      • Akses saat jaringan dinonaktifkan

      def request_aliyun_com(row):
          import requests
      
          url = "https://github.com/aliyun/alibabacloud-odps-maxframe-client"
          response = requests.get(url)
          return response.text
      
      
      df.apply(
          request_aliyun_com, axis=1, dtypes={"content": np.str_}, output_type="dataframe"
      ).execute()
      

      Pesan error yang sesuai:

      ScriptError: ODPS-0123055: InstanceId: 20250622070516226gzo61d9idlr
      ODPS-0123055:User script exception - Traceback (most recent call last):
        File "/usr/ali/python3.11.7/lib/python3.11/site-packages/urllib3/connection.py", line 196, in _new_conn
          sock = connection.create_connection(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/ali/python3.11.7/lib/python3.11/site-packages/urllib3/util/connection.py", line 85, in create_connection
          raise err
        File "/usr/ali/python3.11.7/lib/python3.11/site-packages/urllib3/util/connection.py", line 73, in create_connection
          sock.connect(sa)
      ConnectionRefusedError: [Errno 111] Connection refused
      
  • Solusi:

    1. Untuk error exception, analisis informasi stack untuk mengidentifikasi fungsi penyebab error, lalu perbaiki fungsi tersebut.

    2. Setelah memperbaiki error, uji secara lokal dengan membuat data yang sesuai dan memanggil fungsi tersebut sebagai fungsi Python biasa. Contohnya:

    def udf_func(row):
        import json
    
        text = row["json_text"]
        data = json.loads(text)
        return data
    
    # Buat input dan uji logika fungsi secara lokal
    udf_func(pd.Series(['{"hello": "maxfrmae"}'], index=["json_text"]))
    
    1. Untuk masalah akses jaringan, aktifkan akses jaringan. Untuk informasi lebih lanjut, lihat Proses pengaktifan jaringan.

    2. Untuk kegagalan deserialisasi, periksa apakah ada dependensi tak terduga yang diperkenalkan. Selain itu, pastikan dependensi yang disebutkan dalam pesan error telah diinstal dengan benar menggunakan PythonPack atau disertakan dalam lingkungan runtime sebagai resource.

Masalah 14: ODPS-0123144: Fuxi job failed - kInstanceMonitorTimeout CRASH_EXIT, usually caused by bad udf performance

  • Penyebab: UDF mengalami timeout.

  • Penjelasan pesan error

    Selama eksekusi UDF, Anda mungkin menemui pesan error seperti kInstanceMonitorTimeout atau CRASH_EXIT, usually caused by bad udf performance.

    Error ini biasanya berarti UDF mengalami timeout. Dalam skenario komputasi offline MaxCompute, waktu eksekusi UDF dipantau berdasarkan batch baris. Jika UDF tidak menyelesaikan pemrosesan jumlah baris tertentu dalam waktu yang ditentukan, maka akan mengalami timeout dan gagal. Konfigurasi terkait adalah sebagai berikut:

    from maxframe import options
    options.sql.settings = {
        # Ukuran batch. Default: 1024. Minimum: 1.
        "odps.sql.executionengine.batch.rowcount": "1",
        # Timeout batch. Default: 1800. Maksimum: 3600.
        "odps.function.timeout": "3600",
    }
    
  • Solusi

    Sesuaikan ukuran batch dan timeout batch sesuai kebutuhan.

Masalah 15: ODPS-0123144: Fuxi job failed - fuxi job failed, Job exceed live limit

  • Penyebab: Pekerjaan MaxCompute memiliki periode timeout maksimum 24 jam. Jika pekerjaan berjalan lebih dari 24 jam, pekerjaan tersebut gagal.

  • Penjelasan pesan error

    Sistem pemetaan CDN menentukan bahwa pekerjaan telah mengalami timeout lalu menghentikannya. Status pekerjaan berubah menjadi Failed. Jika pekerjaan dijalankan di DataWorks, periode timeout yang berbeda mungkin berlaku. Untuk informasi lebih lanjut, hubungi tim DataWorks. Dalam kasus ini, status pekerjaan adalah Canceled.

  • Solusi

    Anda dapat menyesuaikan waktu runtime maksimum pekerjaan sesuai kebutuhan:

    from maxframe import options
    
    # Tetapkan waktu hidup maksimum untuk sesi MaxFrame
    options.session.max_alive_seconds = 72 * 60 * 60
    # Tetapkan timeout idle maksimum untuk sesi MaxFrame
    options.session.max_idle_seconds = 72 * 60 * 60
    options.sql.settings = {
        # Tetapkan waktu runtime maksimum untuk pekerjaan SQL. Default: 24 jam. Maksimum: 72 jam.
        "odps.sql.job.max.time.hours": 72,
    }
    

Masalah 16: 0130071:[0,0] Semantic analysis exception - physical plan generation failed: unable to retrive row count of file pangu://xxx

  • Penyebab: Error ini dapat terjadi saat Anda menggunakan flag seperti odps.sql.split.dop untuk menentukan jumlah tugas split.

  • Penjelasan pesan error

    Error ini biasanya menunjukkan bahwa file meta tidak dihasilkan saat data ditulis ke tabel sumber. Akibatnya, metadata tabel sumber tidak dapat diambil secara langsung, dan tabel sumber tidak dapat dibagi secara akurat.

  • Solusi

    1. Gunakan flag odps.stage.mapper.split.size sebagai gantinya. Satuannya megabyte (MB). Nilai default adalah 256, dan nilai minimum adalah 1.

    2. Jika pembagian yang akurat diperlukan, pertimbangkan untuk membuat ulang CMF. Untuk melakukannya, hubungi tim MaxCompute.

      Selain itu, untuk memastikan file meta dihasilkan saat menulis ke tabel, tambahkan flag berikut:

      from maxframe import options
      
      options.sql.settings = {
          "odps.task.merge.enabled": "false",
          "odps.sql.reshuffle.dynamicpt": "false",
          "odps.sql.enable.dynaparts.stats.collection": "true",
          "odps.optimizer.dynamic.partition.is.first.nth.value.split.enable": "false",
          "odps.sql.stats.collection.aggressive":"true",
      }
      

      Kami akan mempertimbangkan cara yang lebih baik untuk memastikan stabilitas fitur split akurat di masa depan.

Masalah 17: ODPS-0130071:[x,y] Semantic analysis exception

  • Penyebab: Dalam skenario `ReadOdpsQuery`, error ini biasanya menunjukkan masalah semantik pada kueri SQL itu sendiri.

  • Pesan error

    Error ini biasanya menunjukkan masalah semantik pada pernyataan SQL.

  • Solusi

    1. Periksa sintaks SQL.

    2. Tingkatkan klien MaxFrame dengan menjalankan perintah berikut: pip install --upgrade maxframe.

    3. Jika masalah tetap berlanjut, hubungi tim MaxFrame.

Masalah 18: ODPS-0020041:StringOutOfMaxLength:String length X is larger than maximum Y

  • Penyebab: String yang terlalu besar ditemui saat menulis data ke tabel atau selama proses shuffle. Panjang string melebihi panjang maksimum yang diizinkan.

  • Penjelasan pesan error

    Untuk memastikan stabilitas komputasi, MaxCompute membatasi panjang maksimum string yang dapat dibaca dan ditulis di lapisan penyimpanan hingga 268.435.456 karakter.

  • Solusi

    1. Pertimbangkan untuk memotong atau mengabaikan data yang mungkin menyebabkan error. Di ReadOdpsQuery, Anda dapat menggunakan LENGTH untuk memfilter data.

    2. Pertimbangkan untuk mengompresi data sebelum menyimpannya, misalnya menggunakan gzip. Hal ini dapat secara signifikan mengurangi panjang dan ukuran string.

    def compress_string(input_string):
      """
        Mengompresi string menggunakan gzip.
        """
      encoded_string = input_string.encode('utf-8')
      compressed_bytes = gzip.compress(encoded_string)
      return compressed_bytes
    
    1. Hubungi tim MaxCompute untuk dukungan terkait data spesifik.

Masalah 19: ODPS-0010000:System internal error - fuxi job failed, caused by: process exited with code 0

  • Penyebab: Pekerjaan yang berisi UDF atau fungsi AI gagal.

  • Penjelasan pesan error

    Hal ini biasanya menunjukkan bahwa error kehabisan memori (OOM) terjadi selama eksekusi UDF atau fungsi AI.

  • Solusi

    1. Hubungi tim MaxCompute untuk mengonfirmasi penggunaan memori aktual.

    2. Jalankan UDF atau fungsi AI dengan memori lebih besar.

      Untuk UDF, gunakan @with_running_options untuk mengatur memori:

      @with_running_options(memory="8GB")
      def udf_func(row):
          return row
      

      Untuk fungsi AI, atur memori di fungsi menggunakan running_options={"memory": "8GB"}.

Masalah 20: ODPS-0123131:User defined function exception - internal error - Fatal Error Happended

  • Penyebab: Membaca dari atau menulis ke tabel eksternal.

  • Penjelasan pesan error: Hal ini biasanya menunjukkan bahwa error internal terjadi saat membaca dari atau menulis ke tabel eksternal.

  • Solusi: Hubungi tim MaxCompute.

Masalah 21: ODPS-0010000:System internal error - com.aliyun.odps.metadata.common.MetastoreServerException: 0420111:Database not found

  • Penyebab: Informasi skema, proyek, atau tabel yang ditentukan tidak ditemukan saat membaca dari atau menulis ke tabel.

  • Penjelasan pesan error: Metadata yang menjadi dasar komputasi tidak ditemukan. Akibatnya, pekerjaan tidak dapat dijalankan.

  • Solusi:

    1. Periksa apakah informasi proyek, skema, dan tabel yang digunakan dalam SQL sudah benar. Jika belum, perbaiki informasi tersebut dan coba lagi.

    2. Hubungi tim MaxCompute.

Masalah 22: ODPS-0010000:System internal error - fuxi job failed, caused by: process killed by signal 7

  • Penyebab: Pekerjaan yang berisi UDF gagal.

  • Penjelasan pesan error: UDF mengirimkan sinyal abnormal selama runtime.

  • Solusi:

    1. Periksa apakah UDF menggunakan sinyal untuk mengirim sinyal cancel, timeout, atau sinyal lain ke proses.

    2. Hubungi tim MaxCompute untuk troubleshooting.

Masalah 23: ODPS-0010000:System internal error - fuxi job failed, caused by: StdException:vector::_M_range_insert

  • Penyebab: Error ini terkait dengan pekerjaan yang berisi UDF.

  • Penjelasan pesan error: UDF tidak dapat meminta memori yang cukup saat runtime, sehingga menyebabkan kegagalan penyisipan vektor. Periksa kode bisnis, library dependensi, dan pengaturan memori.

  • Solusi:

    1. Periksa masalah memori di UDF. Pastikan library dependensi native tidak memiliki masalah memori dan versinya terbaru. Tingkatkan memori yang diminta oleh UDF.

    2. Hubungi tim MaxCompute untuk troubleshooting.

Masalah 24: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: task:M1 instance count exceeds limit 99999

  • Penyebab: Hal ini dapat terjadi pada pekerjaan apa pun jika tabel sumber berukuran besar. Pengaturan flag split yang salah juga dapat menyebabkan masalah ini.

  • Penjelasan pesan error

    Dalam pekerjaan SQL MaxCompute, jika tidak ada pengaturan yang dikonfigurasi, tabel sumber secara default dibagi dan diproses secara terdistribusi. Ukuran chunk default adalah 256 MB. Jika jumlah total chunk yang dibuat melebihi 99.999, error ini terjadi.

  • Solusi:

    1. Gunakan flag odps.stage.mapper.split.size. Satuannya megabyte (MB). Nilai default adalah 256, dan nilai minimum adalah 1. Atur nilai yang lebih besar untuk memastikan jumlah total chunk kurang dari 99.999.

    2. Gunakan flag odps.sql.split.dop. Nilai minimum adalah 1. Flag ini menentukan jumlah target chunk yang diharapkan.

    3. Karena berbagai kendala, jumlah akhir chunk mungkin tidak sama dengan jumlah target yang diharapkan. Menetapkan jumlah chunk mendekati batas atas masih dapat menyebabkan error. Jika kedua metode gagal setelah beberapa penyesuaian, hubungi tim MaxCompute.

Masalah 25: ODPS-0110061:Failed to run ddltask - ODPS-0130131:Table not found

  • Penyebab: Error ini dapat terjadi pada pekerjaan MaxFrame jangka panjang yang berjalan lebih dari satu hari.

  • Penjelasan pesan error

    Tugas Data Definition Language (DDL) internal MaxFrame gagal. Kegagalan ini biasanya terjadi ketika satu tahap komputasi berjalan lebih dari 24 jam, sehingga tabel node leluhur dalam sesi yang sama kedaluwarsa.

    Tabel-tabel ini biasanya merupakan tabel temporary yang dibuat selama proses komputasi, khususnya tabel yang dihasilkan setelah pemanggilan df.execute(). Tabel sink yang ditentukan oleh to_odps_table biasanya tidak mengalami masalah ini.

  • Solusi:

    Tetapkan Waktu hidup (TTL) yang lebih lama untuk tabel temporary. Satuannya hari. Secara default, TTL tabel temporary adalah satu hari. Jika pekerjaan komputasi memiliki beberapa operator yang mungkin berjalan lintas hari berbeda, Anda harus mengatur parameter ini:

    options.sql.settings = {
        "session.temp_table_lifecycle": 3,
    }
    

Masalah 26: NoTaskServerResponseError

  • Penyebab: Di Jupyter Notebook, Anda membuat sesi MaxFrame dan menjalankan beberapa pekerjaan. Kemudian, Anda berhenti lebih dari 1 jam sebelum menjalankan skrip berikutnya. Error ini mungkin terjadi.

  • Penjelasan pesan error

    Sesi MaxFrame telah kedaluwarsa dan tidak dapat ditemukan.

  • Solusi:

    1. Buat ulang sesi tersebut. Namun, status komputasi dari sel sebelumnya tidak akan dipertahankan.

    2. Jika Anda berencana berhenti sejenak dan ingin melanjutkan pekerjaan nanti, atur parameter berikut:

    from maxframe import options
    
    # Tetapkan masa kedaluwarsa menjadi 24 jam. Default-nya adalah 1 jam.
    options.session.max_idle_seconds = 60 * 60 * 24
    

Masalah 27: IntCastingNaNError: Cannot convert non-finite values (NA or inf) to integer: Error while type casting for column 'xx'

  • Penyebab: Kolom bertipe BIGINT atau INT berisi nilai NULL atau INF, dan hasilnya dicetak—termasuk pencetakan otomatis di Jupyter Notebook.

  • Penjelasan pesan error

    Data MaxFrame dibangun di atas DataFrame. Saat data dimuat secara lokal, data tersebut dikonversi ke pandas DataFrame. Di pandas, data bertipe BIGINT dan INT tidak dapat berisi NULL. Nilai NULL diperlakukan sebagai FLOAT.

  • Solusi:

    Tim MaxFrame sedang berupaya menyelesaikan masalah ini. Namun, sistem tipe sangat kompleks, sehingga timeline yang jelas belum dapat diberikan saat ini. Untuk sementara, pertimbangkan metode berikut:

    1. Gunakan `fillna` untuk mengisi nilai NULL sebelum mencetak.

    2. Gunakan `astype` untuk mengonversi ke FLOAT sebelum mencetak.

    3. Jangan mencetak kolom tersebut kecuali benar-benar diperlukan.

Masalah 28: ODPS-0010000:System internal error - fuxi job failed, SQL job failed after failover for too many times

  • Penyebab

    1. Pekerjaan mencakup operasi Reduce atau Join.

    2. Nilai `split.dop` yang besar atau nilai `split.size` yang kecil diatur, sehingga menghasilkan banyak instans mapper.

    3. Nilai `reducer.num` atau `joiner.num` yang besar diatur, sehingga menghasilkan banyak instans reducer atau joiner.

  • Penjelasan pesan error

    Data shuffle terlalu besar, sehingga menyebabkan error kehabisan memori (OOM) pada Job Master.

  • Solusi:

    1. Kurangi jumlah mapper dan reducer/joiner. Jumlah maksimum sebaiknya tidak melebihi 10.000.

    2. Hubungi tim MaxCompute.

Masalah 29: ODPS-0010000:System internal error - task/common/task_resource_helper.cpp(747): OdpsException: ODPS-0020011:Invalid parameter - Total resource size must be <= 2048MB

  • Penyebab: Pekerjaan berisi UDF, dan UDF tersebut bergantung pada resource berukuran besar.

  • Penjelasan pesan error

    Ukuran total resource yang dapat diandalkan oleh UDF adalah 2048 MB. Pekerjaan yang melebihi batas ini tidak dapat dijalankan.

  • Solusi:

    Gunakan akselerasi volume eksternal untuk mengunduh resource yang sesuai dari Object Storage Service (OSS). Metode ini memberikan kecepatan unduh lebih cepat dan batas yang lebih tinggi.

Masalah 30: ODPS-0130071:[22,132] Semantic analysis exception - column values_list in source has incompatible type ARRAY/MAP/STRUCT

  • Penyebab: Data yang diproses berisi array, map, atau struct.

  • Penjelasan pesan error

    1. Ini mungkin merupakan masalah deklarasi tipe. Kolom target yang diharapkan bukan bertipe array, map, atau struct.

    2. Ini mungkin merupakan bug pada sistem tipe MaxFrame.

  • Solusi:

    1. Tingkatkan klien MaxFrame dengan menjalankan pip install -U maxframe, lalu coba lagi.

    2. Hubungi tim MaxFrame untuk troubleshooting.

Masalah 31: Shuffle output too large

Solusi: Gunakan flag `odps.sql.sys.flag.fuxi_JobMaxInternalFolderSize` untuk menentukan ukuran ruang shuffle dalam megabyte (MB).