在基于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("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 # 引用第三方包 @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
文档内容是否对您有帮助?