全部產品
Search
文件中心

MaxCompute:引用第三方包及鏡像

更新時間:Sep 20, 2025

在基於MaxFrame進行Python開發過程中,通常需要引用第三方包或鏡像,為方便您的快速使用,MaxFrame支援通過介面方式直接使用已上傳的第三方包及鏡像。

在MaxFame開發中引用第三方包

  1. 上傳第三方包。

    說明

    製作第三方包的詳情,請參見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資源

  2. 在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作業中引用第三方包。

  1. 準備測試表test_float_col及測試資料。

    CREATE TABLE test_float_col (col1 double);
    INSERT INTO test_float_col VALUES (3.75),(2.51);
  2. 編寫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())
    
  3. 本地MaxFrame用戶端,運行demo.py檔案。命令樣本如下:

    python demo.py

    返回結果如下。

    0    1.182537
    1    0.708048
    Name: col1, dtype: float64

在MaxFame開發中引用鏡像

本文以引用內建鏡像scipy,並計算test_float_col測試表中列的PSI值為例,示範如何在MaxFrame作業中使用鏡像。

  1. 準備測試表test_float_col及測試資料。

    CREATE TABLE test_float_col (col1 double);
    INSERT INTO test_float_col VALUES (3.75),(2.51);
  2. 編寫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())
  3. 本地MaxFrame用戶端,運行demo.py檔案。命令樣本如下:

    python demo.py

    返回結果如下。

    0    1.182537
    1    0.708048
    Name: col1, dtype: float64