引用第三方包及镜像

在基于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("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
    
    # 引用第三方包
    @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