全部产品
Search
文档中心

MaxCompute:Praktik Skenario

更新时间:Jul 02, 2025

MaxCompute menyediakan fungsi yang ditentukan pengguna (UDF) dan kemampuan pengembangan Python seperti PyODPS dan MaxFrame. Dokumen ini menjelaskan cara menggunakan gambar dalam pekerjaan pengembangan MaxCompute UDF, PyODPS, dan MaxFrame.

Menggunakan gambar dalam pengembangan SQL UDF

Contoh berikut menunjukkan penggunaan Pandas dalam UDF untuk menjumlahkan kolom.

  1. Tulis skrip Python UDF dan simpan sebagai sum_pandas.py. Berikut adalah contoh skrip:

    from odps.udf import annotate
    import pandas as pd
    
    @annotate("string, string -> string")
    class SumColumns(object):
        def evaluate(self, arg1, arg2):
            # Konversi parameter input ke pandas DataFrame
            df = pd.DataFrame({'col1': arg1.split(','), 'col2': arg2.split(',')})
    
            # Lakukan operasi pemrosesan data dengan menggunakan pandas
            # Hitung jumlah dua kolom sebagai contoh
            df['sum'] = df['col1'].astype(int) + df['col2'].astype(int)
    
            # Konversi hasil pemrosesan menjadi string dan kembalikan
            result = ','.join(df['sum'].astype(str).values)
            return result
  2. Unggah skrip sum_pandas.py sebagai sumber daya ke Proyek MaxCompute Anda. Untuk detail lebih lanjut, lihat Tambahkan Sumber Daya. Gunakan perintah berikut:

    ADD PY sum_pandas.py -f;
  3. Daftarkan skrip sum_pandas.py sebagai UDF SumColumns. Untuk detail lebih lanjut, lihat Buat UDF. Gunakan perintah berikut:

    CREATE FUNCTION SumColumns AS 'sum_pandas.SumColumns' USING 'sum_pandas.py';
  4. Buat tabel uji testsum dengan data uji yang sesuai.

    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. Tentukan gambar melalui parameter Flag saat memanggil UDF.

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

    Hasil yang diharapkan:

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

Menggunakan gambar dalam pengembangan PyODPS

Contoh berikut mengimplementasikan fungsi psi dari paket scipy.

  1. Siapkan tabel uji test_float_col dan masukkan data uji.

    CREATE TABLE test_float_col (col1 double);
    INSERT INTO test_float_col VALUES (3.75),(2.51);
  2. Tulis kode PyODPS untuk menghitung psi(col1) dan simpan sebagai psi_col.py. Berikut adalah contoh kode:

    import os
    from odps import ODPS, options
    
    def my_psi(v):
        from scipy.special import psi
    
        return float(psi(v))
    
    # Jika proyek mengaktifkan isolasi, opsi berikut tidak diperlukan
    options.sql.settings = {"odps.isolation.session.enable": True}
    
    o = ODPS(
          # Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID disetel ke ID AccessKey Anda,
          # dan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET disetel ke Rahasia AccessKey Anda.
          # Tidak disarankan untuk langsung menggunakan string ID AccessKey dan Rahasia AccessKey.
          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()
    # Eksekusi langsung dan dapatkan hasilnya
    df.col1.map(my_psi).execute(image='scipy')
    # Simpan ke tabel lain
    df.col1.map(my_psi).persist("result_table", image='scipy')

    Deskripsi parameter:

    • ALIBABA_CLOUD_ACCESS_KEY_ID: Setel variabel lingkungan ini ke ID AccessKey yang memiliki izin MaxCompute yang diperlukan untuk proyek MaxCompute. Anda bisa mendapatkan ID AccessKey dari halaman Pengelolaan AccessKey.

    • ALIBABA_CLOUD_ACCESS_KEY_SECRET: Setel variabel lingkungan ini ke Rahasia AccessKey yang sesuai dengan ID AccessKey.

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

    • your-end-point: Titik akhir untuk wilayah tempat proyek MaxCompute berada. Anda dapat memilih titik akhir berdasarkan metode konektivitas jaringan. Sebagai contoh, http://service.cn-chengdu.maxcompute.aliyun.com/api. Untuk detailnya, lihat Titik Akhir.

  3. Lihat hasilnya di tabel result_table.

    SELECT * FROM result_table

    Hasil yang diharapkan:

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

Menggunakan gambar dalam pengembangan MaxFrame

Contoh berikut mengimplementasikan fungsi psi dari paket scipy.

  1. Buat tabel uji test_float_col dan masukkan data uji.

    CREATE TABLE test_float_col (col1 double);
    INSERT INTO test_float_col VALUES (3.75),(2.51);
  2. Tulis kode MaxFrame untuk menghitung psi(col1) dan simpan sebagai psi_col.py. Berikut adalah contoh kode:

    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
    
    # Gunakan gambar 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 disetel ke ID AccessKey Anda,
          # dan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET disetel ke Rahasia AccessKey Anda.
          # Tidak disarankan untuk langsung menggunakan string ID AccessKey dan Rahasia AccessKey.
          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')
    
    # Eksekusi dan dapatkan hasilnya
    print(df.col1.map(my_psi).execute().fetch()

    Deskripsi parameter:

    • ALIBABA_CLOUD_ACCESS_KEY_ID: Setel variabel lingkungan ini ke ID AccessKey yang memiliki izin MaxCompute yang diperlukan untuk proyek MaxCompute. Anda bisa mendapatkan ID AccessKey dari halaman Pengelolaan AccessKey.

    • ALIBABA_CLOUD_ACCESS_KEY_SECRET: Setel variabel lingkungan ini ke Rahasia AccessKey yang sesuai dengan ID AccessKey.

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

    • your-end-point: Titik akhir untuk wilayah tempat proyek MaxCompute berada. Anda dapat memilih titik akhir berdasarkan metode konektivitas jaringan. Sebagai contoh, http://service.cn-chengdu.maxcompute.aliyun.com/api. Untuk detailnya, lihat Titik Akhir.

    Hasil yang diharapkan:

    0    1.182537
    1    0.708048
    Name: col1, dtype: float64