在基於MaxFrame進行Python開發過程中,通常需要引用第三方包或鏡像,為方便您的快速使用,MaxFrame支援通過介面方式直接使用已上傳的第三方包及鏡像。
在MaxFame開發中引用第三方包
上傳第三方包。
說明製作第三方包的詳情,請參見PyODPS製作第三方包。
使用第三方包前,請確保您產生的包已被上傳至MaxCompute Archive資源。本文以packages.tar.gz第三方包為例,上傳方式如下:
使用代碼上傳,樣本如下。
import os from odps import ODPS # 確保 ALIBABA_CLOUD_ACCESS_KEY_ID 環境變數設定為使用者 Access Key ID, # ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境變數設定為使用者 Access Key Secret, # 不建議直接使用 Access Key ID / Access Key Secret 字串 o = ODPS( os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), project='<YOUR-DEFAULT-PROJECT>', endpoint='<YOUR-END-POINT>', ) # 將packages.tar.gz替換成目標包所在的路徑和檔案名稱 o.create_resource("packages.tar.gz", "archive", fileobj=open("packages.tar.gz", "rb"))使用DataWorks上傳資源。具體操作,請參見建立並使用MaxCompute資源。
在MaxFrame開發中引用第三方包。具體操作,請參見自動化打包服務。
MaxFrame支援通過聲明方式,在作業開發中引用第三方包及檔案,引入
with_resource_libraries模組,樣本如下。from maxframe.udf import with_resource_libraries @with_resource_libraries("packages.tar.gz", "demo.py")
樣本
本文以引用packages.tar.gz第三方包,並計算test_float_col測試表中列的PSI值為例,為您介紹如何在MaxFrame作業中引用第三方包。
準備測試表
test_float_col及測試資料。CREATE TABLE test_float_col (col1 double); INSERT INTO test_float_col VALUES (3.75),(2.51);編寫MaxFrame代碼,並將其產生
demo.py檔案儲存至本地。程式碼範例如下:# 計算測試表test_float_col中col1列的PSI值 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 from maxframe.udf import with_resource_libraries # 引用第三方包 @with_resource_libraries("packages.tar.gz") def my_psi(v): from scipy.special import psi return float(psi(v)) o = ODPS( # 確保 ALIBABA_CLOUD_ACCESS_KEY_ID 環境變數設定為使用者 Access Key ID, # ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境變數設定為使用者 Access Key Secret, # 不建議直接使用AccessKey ID和 AccessKey Secret字串。 os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), project='your-default-project', endpoint='your-end-point' ) # 建立MaxFrame Session session = new_session(o) df = md.read_odps_table('test_float_col') # 直接執行並取得結果 print(df.col1.map(my_psi).execute().fetch())在本地MaxFrame用戶端,運行demo.py檔案。命令樣本如下:
python demo.py返回結果如下。
0 1.182537 1 0.708048 Name: col1, dtype: float64
在MaxFame開發中引用鏡像
本文以引用內建鏡像scipy,並計算test_float_col測試表中列的PSI值為例,示範如何在MaxFrame作業中使用鏡像。
準備測試表
test_float_col及測試資料。CREATE TABLE test_float_col (col1 double); INSERT INTO test_float_col VALUES (3.75),(2.51);編寫MaxFrame代碼,並將其產生
demo.py檔案儲存至本地。程式碼範例如下。# 計算測試表test_float_col中col1列的PSI值的代碼 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 # 引用內建scipy鏡像 config.options.sql.settings = { "odps.session.image": "scipy" } def my_psi(v): from scipy.special import psi return float(psi(v)) o = ODPS( # 確保 ALIBABA_CLOUD_ACCESS_KEY_ID 環境變數設定為使用者 Access Key ID, # ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境變數設定為使用者 Access Key Secret, # 不建議直接使用AccessKey ID和 AccessKey Secret字串。 os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), project='your-default-project', endpoint='your-end-point' ) # 建立MaxFrame Session session = new_session(o) df = md.read_odps_table('test_float_col') # 直接執行並取得結果 print(df.col1.map(my_psi).execute().fetch())在本地MaxFrame用戶端,運行
demo.py檔案。命令樣本如下:python demo.py返回結果如下。
0 1.182537 1 0.708048 Name: col1, dtype: float64