All Products
Search
Document Center

MaxCompute:Kasus penggunaan

Last Updated:Jul 18, 2026

MaxCompute mendukung user-defined functions (UDF), PyODPS, dan MaxFrame untuk pengembangan pekerjaan. Anda dapat menggunakan image untuk menyertakan paket Python pihak ketiga seperti pandas dan SciPy dalam pekerjaan UDF, PyODPS, dan MaxFrame Anda.

Gunakan image dalam SQL UDF

Contoh berikut membuat UDF berbasis pandas yang menjumlahkan nilai dari dua kolom.

  1. Tulis skrip UDF Python dan simpan sebagai file sum_pandas.py. Kode berikut memberikan contohnya:

    from odps.udf import annotate
    import pandas as pd
    
    @annotate("string, string -> string")
    class SumColumns(object):
        def evaluate(self, arg1, arg2):
            # Konversi argumen input menjadi DataFrame pandas.
            df = pd.DataFrame({'col1': arg1.split(','), 'col2': arg2.split(',')})
    
            # Proses data dengan menggunakan pandas.
            # Contoh ini menghitung jumlah dari dua kolom.
            df['sum'] = df['col1'].astype(int) + df['col2'].astype(int)
    
            # Konversi hasil menjadi string dan kembalikan.
            result = ','.join(df['sum'].astype(str).values)
            return result
  2. Unggah skrip sum_pandas.py sebagai resource ke proyek MaxCompute Anda. Untuk informasi selengkapnya, lihat Add resources. Perintah contoh berikut menunjukkan cara mengunggah skrip tersebut:

    ADD PY sum_pandas.py -f;
  3. Daftarkan skrip sum_pandas.py yang telah Anda unggah sebagai fungsi user-defined SumColumns. Untuk informasi selengkapnya, lihat Register a function. Perintah contoh berikut menunjukkan cara mendaftarkan fungsi tersebut:

    CREATE FUNCTION SumColumns AS 'sum_pandas.SumColumns' USING 'sum_pandas.py';
  4. Buat tabel uji bernama testsum dan masukkan data uji ke dalam tabel tersebut.

    CREATE TABLE testsum (col1 string, col2 string);
    INSERT INTO testsum VALUES ('1,2,3','1,2,3'),('1,2,3','3,2,1'),('1,2,3','4,5,6');
  5. Panggil UDF dan tentukan image yang ada dengan menggunakan flag.

    set odps.sql.python.version=cp37;
    set odps.session.image = <image_name>;
    SELECT SumColumns(col1,col2) AS result FROM testsum;

    Hasil berikut dikembalikan:

    +------------+
    | result     |
    +------------+
    | 2,4,6      |
    | 4,4,4      |
    | 5,7,9      |
    +------------+

Menggunakan gambar di PyODPS

Contoh berikut menggunakan image untuk memanggil fungsi psi dari paket SciPy dalam pekerjaan PyODPS.

  1. Buat tabel uji bernama test_float_col dan masukkan data uji ke dalam tabel tersebut.

    CREATE TABLE test_float_col (col1 double);
    INSERT INTO test_float_col VALUES (3.75),(2.51);
  2. Tulis skrip PyODPS untuk menghitung nilai psi(col1), simpan skrip tersebut sebagai file psi_col.py, lalu jalankan file tersebut. Kode berikut memberikan contohnya:

    import os
    from odps import ODPS, options
    
    def my_psi(v):
        from scipy.special import psi
    
        return float(psi(v))
    
    # Jika proyek memiliki isolasi yang diaktifkan, opsi berikut tidak diperlukan.
    options.sql.settings = {"odps.isolation.session.enable": True}
    
    o = ODPS(
          # Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID diatur ke ID AccessKey Anda,
          # dan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET diatur ke rahasia AccessKey Anda.
          # Kami menyarankan agar Anda tidak menyematkan ID AccessKey dan rahasia AccessKey secara langsung dalam kode.
          os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
          os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
          project='your-default-project',
          endpoint='your-end-point'
    )
    
    df = o.get_table("test_float_col").to_df()
    # Jalankan pekerjaan dan ambil hasilnya.
    df.col1.map(my_psi).execute(image='scipy')
    # Simpan hasilnya ke tabel lain.
    df.col1.map(my_psi).persist("result_table", image='scipy')

    Deskripsi parameter:

    • ALIBABA_CLOUD_ACCESS_KEY_ID: Atur variabel lingkungan ini ke ID AccessKey yang memiliki izin MaxCompute yang diperlukan pada objek di proyek MaxCompute target. Untuk mendapatkan ID AccessKey, buka halaman AccessKey Management.

    • ALIBABA_CLOUD_ACCESS_KEY_SECRET: Atur variabel lingkungan ini ke rahasia AccessKey yang sesuai dengan ID AccessKey tersebut.

    • your-default-project: Nama proyek MaxCompute Anda. Untuk melihat nama proyek, login ke MaxCompute console dan pilih Workspace > Projects di panel navigasi sebelah kiri.

    • your-end-point: Titik akhir wilayah tempat proyek MaxCompute Anda berada. Anda dapat memilih titik akhir berdasarkan jenis koneksi jaringan Anda, misalnya, http://service.cn-chengdu.maxcompute.aliyun.com/api. Untuk informasi selengkapnya, lihat Endpoints.

  3. Lihat hasilnya di tabel result_table.

    SELECT * FROM result_table

    Hasil berikut dikembalikan:

    +------------+
    | col1       |
    +------------+
    | 1.1825373886117962 |
    | 0.7080484451910534 |
    +------------+

Gunakan image dalam MaxFrame

Contoh berikut menggunakan image untuk memanggil fungsi psi dari paket SciPy dalam pekerjaan MaxFrame.

  1. Buat tabel uji bernama test_float_col dan masukkan data uji ke dalam tabel tersebut.

    CREATE TABLE test_float_col (col1 double);
    INSERT INTO test_float_col VALUES (3.75),(2.51);
  2. Tulis skrip MaxFrame untuk menghitung nilai psi(col1), simpan skrip tersebut sebagai file psi_col.py, lalu jalankan file tersebut. Kode berikut memberikan contohnya:

    import os
    from odps import ODPS, options
    from maxframe.session import new_session
    import maxframe.dataframe as md
    
    
    from maxframe.config import options
    from maxframe import config
    
    # Rujuk image SciPy bawaan.
    config.options.sql.settings = {
        "odps.session.image": "scipy"
    }
    def my_psi(v):
        from scipy.special import psi
        return float(psi(v))
    
    o = ODPS(
          # Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID diatur ke ID AccessKey Anda,
          # dan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET diatur ke rahasia AccessKey Anda.
          # Kami menyarankan agar Anda tidak menyematkan ID AccessKey dan rahasia AccessKey secara langsung dalam kode.
          os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
          os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
          project='your-default-project',
          endpoint='your-end-point'
    )
    
    # Buat sesi MaxFrame.
    session = new_session(o)
    df = md.read_odps_table('test_float_col')
    
    # Jalankan pekerjaan dan ambil hasilnya.
    print(df.col1.map(my_psi).execute().fetch())

    Deskripsi parameter:

    • ALIBABA_CLOUD_ACCESS_KEY_ID: Atur variabel lingkungan ini ke ID AccessKey yang memiliki izin MaxCompute yang diperlukan pada objek di proyek MaxCompute target. Untuk mendapatkan ID AccessKey, buka halaman AccessKey Management.

    • ALIBABA_CLOUD_ACCESS_KEY_SECRET: Atur variabel lingkungan ini ke rahasia AccessKey yang sesuai dengan ID AccessKey tersebut.

    • your-default-project: Nama proyek MaxCompute Anda. Untuk melihat nama proyek, login ke MaxCompute console dan pilih Workspace > Projects di panel navigasi sebelah kiri.

    • your-end-point: Titik akhir wilayah tempat proyek MaxCompute Anda berada. Anda dapat memilih titik akhir berdasarkan jenis koneksi jaringan Anda, misalnya, http://service.cn-chengdu.maxcompute.aliyun.com/api. Untuk informasi selengkapnya, lihat Endpoints.

    Hasil berikut dikembalikan:

    0    1.182537
    1    0.708048
    Name: col1, dtype: float64