镜像管理

更新时间: 2024-02-21 11:08:19

MaxCompute提供镜像管理功能,内置数据分析、科学计算、机器学习(如Pandas、Numpy、Scikit-learn、Xgboost)等各类常用镜像,并已对镜像进行预先加热,您可在SQL UDF、PyODPS开发等场景中直接引用已有镜像,无需执行繁琐的镜像打包、上传等流程。

背景信息

MaxCompute提供用户自定义函数(UDF)及Python开发的能力,您可以通过编写Java或Python UDF函数实现不同的开发需求。开发UDF时,通常需要在UDF中依赖、引用众多第三方包。您需要准备环境、打包或下载所依赖的第三方包,并将其上传、提交至MaxCompute项目空间。

在开发过程中可能会遇到以下问题:

  • 当UDF有较多外部依赖时,您需要找出UDF依赖的所有第三方包,打包并手动上传至MaxCompute项目空间,操作过程复杂、使用成本高。

  • 不同的MaxCompute项目空间可能有相同的第三方包依赖,在不同项目空间中开发时需要分别上传依赖包,造成额外的管理成本及存储开销。

  • 依赖包版本众多、开发环境不统一,不易维护,且容易造成不同环境带来的各类开发冲突问题。

因此,MaxCompute提供了预先加热的内置镜像,简化您的UDF及Python开发流程,方便您快速地完成开发,同时提高服务的响应速度和性能。

功能说明

  • 丰富的内置镜像

    内置如Pandas、NumPy、Scikit-learn、Xgboost等各类科学计算、数据分析类镜像,面向数据分析、数据挖掘等场景需求可直接使用,避免了繁琐的环境准备、打包及上传流程。

  • 使用方式高效便捷

    使用SQL调用UDF函数时,直接通过Flag参数方式指定所需镜像,即可在当前作业中生效;使用PyODPS(仅支持0.11.5及以上版本)开发时也可通过参数直接指定所需镜像。

使用限制

若您需要在PyODPS中引用镜像进行开发,请升级PyODPS至0.11.5或以上版本。

使用流程

查看内置镜像

  1. 登录MaxCompute控制台,在左上角选择地域。

  2. 在左侧导航栏选择租户管理 > 镜像管理,进入内置镜像模块,即可查看当前MaxCompute内置的镜像列表及相关版本信息。image

内置镜像说明

功能分类

镜像名称

内置三方包及版本信息

编程语言及版本

说明

科学计算

numpy

numpy 1.21.6

Python 3.7

数值计算

scipy

scipy 1.7.3

Python 3.7

科学计算

数据分析

pandas

pandas 1.3.5

Python 3.7

数据处理与分析

统计建模

statsmodels

statsmodels 0.13.5

Python 3.7

统计建模

机器学习

sklearn

scikit-learn 1.0.2

Python 3.7

机器学习算法库

xgboost

xgboost 1.6.2

Python 3.7

机器学习-分布式梯度增强

pytorch

torch 1.13.1

Python 3.7

深度神经网络

除此之外,上述内置镜像均自带基础开发包,包括cloudpickle 2.2.1、pickle5 0.0.12、requests 2.31.0及setuptools 68.0.0。

使用内置镜像

您可在SQL UDF或PyODPS开发中使用内置镜像。

  • 调用UDF时,支持在SQL会话(Session)级别使用Flag指定所依赖的镜像,需同时指定Python版本,命令如下:

    set odps.sql.python.version=cp37;
    set odps.session.image = <镜像名称>;
  • 支持在PyODPS开发中,使用execute或persist方法的image参数指定已有镜像,具体示例请参见在PyODPS开发中使用镜像。命令如下:

    image='<镜像名称>'
    重要

    每个开发作业仅可指定一个镜像,否则会造成镜像冲突问题。

场景实践

在SQL UDF开发中使用镜

以下以使用Pandas实现一个列求和的UDF为例,为您介绍如何在SQL UDF开发中使用镜像。

  1. 编写Python UDF脚本,并将其保存为sum_pandas.py文件。脚本示例如下:

    from odps.udf import annotate
    import pandas as pd
    
    @annotate("string, string -> string")
    class SumColumns(object):
        def evaluate(self, arg1, arg2):
            # 将输入参数转换为pandas DataFrame
            df = pd.DataFrame({'col1': arg1.split(','), 'col2': arg2.split(',')})
    
            # 使用pandas进行数据处理操作
            # 这里以计算两列的和为例
            df['sum'] = df['col1'].astype(int) + df['col2'].astype(int)
    
            # 将处理结果转换为字符串并返回
            result = ','.join(df['sum'].astype(str).values)
            return result
  2. sum_pandas.py脚本以资源形式上传至MaxCompute项目空间,详情请参见添加资源。命令示例如下:

    ADD PY sum_pandas.py -f;
  3. 将已上传的sum_pandas.py脚本注册为自定义函数SumColumns,具体操作请参见注册函数。命令示例如下:

    CREATE FUNCTION SumColumns AS 'sum_pandas.SumColumns' USING 'sum_pandas.py';
  4. 准备测试表testsum及测试数据。

    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');
  5. 调用UDF函数时通过Flag指定镜像。

    set odps.sql.python.version=cp37;
    set odps.session.image = pandas;
    SELECT SumColumns(col1,col2) AS result FROM testsum;

    返回结果:

    +------------+
    | result     |
    +------------+
    | 2,4,6      |
    | 4,4,4      |
    | 5,7,9      |
    +------------+

在PyODPS开发中使用镜像

以下以实现scipy包中的psi函数为例,为您介绍如何在PyODPS中使用镜像。

  1. 准备测试表test_float_col及测试数据。

    CREATE TABLE test_float_col (col1 double);
    INSERT INTO test_float_col VALUES (3.75),(2.51);
  2. 编写PyODPS代码,计算psi(col1)的值,并保存为psi_col.py文件执行。代码示例如下:

    import os
    from odps import ODPS, options
    
    def my_psi(v):
        from scipy.special import psi
    
        return float(psi(v))
    
    # 如果 Project 开启了 Isolation,下面的选项不是必需的
    options.sql.settings = {"odps.isolation.session.enable": True}
    
    o = ODPS('ALIBABA_CLOUD_ACCESS_KEY_ID', 'ALIBABA_CLOUD_ACCESS_KEY_SECRET', '<YOUR_DEFAULT_PROJECT>', '<YOUR_ENDPOINT>')
    df = o.get_table("test_float_col").to_df()
    # 直接执行并取得结果
    df.col1.map(my_psi).execute(image='scipy')
    # 保存到另一张表
    df.col1.map(my_psi).persist("result_table", image='scipy')
  3. 查看结果表result_table。

    SELECT * FROM result_table

    返回结果:

    +------------+
    | col1       |
    +------------+
    | 1.1825373886117962 |
    | 0.7080484451910534 |
    +------------+
阿里云首页 云原生大数据计算服务 MaxCompute 相关技术圈