MaxCompute支持您在Python UDF中引用第三方包,例如Numpy包、需要编译的第三方包或依赖动态链接库的第三方包。本文为您介绍如何通过Python UDF引用第三方包。
背景信息
通过Python UDF使用第三方包支持的场景如下:
- 使用Numpy包(Python 3 UDF)
您需要修改Numpy包的后缀格式,基于MaxCompute客户端上传Numpy包,并注册函数。函数注册成功后即可通过Python 3 UDF调用。
- 使用需要编译的第三方包
您需要在与MaxCompute兼容的环境下,对第三方资源包中的setup.py脚本进行编译生成WHEEL包,并修改后缀格式。基于MaxCompute客户端上传包,并注册函数。函数注册成功后即可通过Python
UDF调用。推荐使用Linux环境,Windows用户推荐使用Docker。
- 使用依赖动态链接库的第三方包
您需要基于第三方包的源码编译so链接库,然后编译生成WHEEL包,并修改后缀格式。基于MaxCompute客户端上传包和so链接库文件,并注册函数。函数注册成功后即可通过Python
UDF调用。
前提条件
在执行操作前,请确认已完成如下操作:
- 已安装Python环境。推荐使用Python 3。
- 已安装并配置MaxCompute客户端。客户端配置详情请参见安装并配置MaxCompute客户端。
- 如果您通过Python UDF使用需要编译的第三方包,请确认已安装pip、setuptools(通过
pip install setuptools
安装)和wheel(通过pip install wheel
安装)。
- 如果您使用的第三方包为GDAL 3.0及以上版本,请确认已安装PROJ 6。
- 如果您通过Docker编译第三方包,请确认已安装Docker,详情请参见Docker安装文档。
使用Numpy包(Python 3 UDF)
您可以通过MaxCompute内置的Python 3环境使用Numpy包。MaxCompute内置的Python 2环境默认安装了Numpy,不需要手动上传Numpy包。通过Python
3 UDF使用Numpy包的步骤如下:
- 以1.19.2版本为例,在PyPI页面的Download files区域,单击文件名后缀为cp37-cp37m-manylinux1_x86_64.whl的Numpy包进行下载。

说明 其它后缀名称的包可能会加载失败。如果您需要选择其他版本,在
PyPI页面左上角的
Navigation区域,单击
Release history即可查看历史版本。
- 修改下载的Numpy包后缀为ZIP格式。
例如numpy-1.19.2-cp37-cp37m-manylinux1_x86_64.zip。
- 通过MaxCompute客户端上传Numpy包至MaxCompute项目空间。上传资源详情请参见资源操作。
命令示例如下:
ADD ARCHIVE D:\Downloads\numpy-1.19.2-cp37-cp37m-manylinux1_x86_64.zip -f;
- 编写Python UDF脚本,保存为PY格式文件。
假设此处保存的脚本名称为import_numpy.py。Python UDF脚本示例如下:
from odps.udf import annotate
@annotate("->string")
class TryImport(object): #类名为TryImport。
def __init__(self):
import sys
sys.path.insert(0, 'work/numpy-1.19.2-cp37-cp37m-manylinux1_x86_64.zip') #Numpy包,您只需要替换work/后边的包名即可。
def evaluate(self):
import numpy
return "import succeed"
- 通过MaxCompute客户端将import_numpy.py脚本以资源形式上传至MaxCompute项目空间。
命令示例如下:
ADD PY D:\Desktop\import_numpy.py -f;
- 使用上传的import_numpy.py脚本及Numpy包,通过MaxCompute客户端注册自定义函数。注册函数详情请参见函数操作。
假设注册的自定义函数名为numpy。命令示例如下:
CREATE FUNCTION numpy AS 'import_numpy.TryImport' USING 'doc_test_dev/resources/import_numpy.py,numpy-1.19.2-cp37-cp37m-manylinux1_x86_64.zip';
说明 注册函数时资源列表里需要加上Numpy包,例如numpy-1.19.2-cp37-cp37m-manylinux1_x86_64.zip。
- 完成注册后您即可编写SQL语句调用新建的自定义函数。执行SQL语句时需要开启 Python3,详情请参见Python 3 UDF。
使用需要编译的第三方包
如果第三方包是PyPI页面中格式为TAR.GZ的压缩包,或从GitHub下载的源码包,这些包解压后的根目录下有时会存在setup.py文件。在使用这种类型的第三方包前,您需要先在与MaxCompute兼容的环境下将setup.py编译生成WHEEL包,然后再执行