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.
-
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 -
Unggah skrip
sum_pandas.pysebagai 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; -
Daftarkan skrip
sum_pandas.pyyang 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'; -
Buat tabel uji bernama
testsumdan 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'); -
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.
-
Buat tabel uji bernama
test_float_coldan masukkan data uji ke dalam tabel tersebut.CREATE TABLE test_float_col (col1 double); INSERT INTO test_float_col VALUES (3.75),(2.51); -
Tulis skrip PyODPS untuk menghitung nilai
psi(col1), simpan skrip tersebut sebagai filepsi_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.
-
-
Lihat hasilnya di tabel
result_table.SELECT * FROM result_tableHasil 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.
-
Buat tabel uji bernama
test_float_coldan masukkan data uji ke dalam tabel tersebut.CREATE TABLE test_float_col (col1 double); INSERT INTO test_float_col VALUES (3.75),(2.51); -
Tulis skrip MaxFrame untuk menghitung nilai
psi(col1), simpan skrip tersebut sebagai filepsi_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 -