1.环境
系统:MacOS
系统自带Python版本(/usr/bin/python):2.7.10
Anaconda Python版本:2.7.14
Maxcompute Studio版本: 2.9.1
2.安装Python|Pyodps|Python插件
MaxCompute studio能支持用户在intellij idea里完成python相关的开发,包括UDF和pyodps脚本,但是使用前必须安装python, pyodps和idea的python插件。
2.1安装Python
略
2.2安装Pyodps
pyodps是MaxCompute的python sdk,安装命令:pip install pyodps
。请确保是给/usr/bin/python安装的,后面在create function时会检查/usr/bin/python是否安装了pyodps(Studio同学说3.0.0会增加指定Python路径的特性,当前版本没有)。由于我的mac上安装了anaconda,pyodps默认安装到了anaconda对应的Python,所以给/usr/bin/python安装pyodps需要运行命令:sudo /usr/bin/python -m pip install pyodps
注意:如果此命令报错提示没有pip这个模块,说明/usr/bin/python下没有安装pip,解决方法见附录4.1.
2.3安装Python插件
在Intellij IDEA的插件仓库中搜索Python Community Edition插件并安装。
2.4配置Python依赖
配置studio module对python的依赖,这样就可以使用进行MaxCompute python开发了。
- File -> Project structure,添加python sdk:
- File -> Project structure,添加python facets:
- File -> Project structure,配置module依赖python facets:
3.开发Python UDF
3.1 开发
- 右键 new | MaxCompute Python,如果没有MaxCompute Python选项说明没有安装好Python插件,参考前文所述的安装指引。
- 输入类名,如hello,选择类型,这里我们选择UDF,点击OK。
- 模板已自动填充框架代码,您只需要编写UDF的入参出参,以及函数逻辑。
3.2 测试
UDF开发好后,下一步就是要测试自己的代码,看是否符合预期。我们支持下载表的部分sample数据到本地运行,进行debug,步骤如下:
- 在Editor中UDF类上右键,点击”运行”菜单,弹出run configuration对话框。UDF|UDAF|UDTF一般作用于select子句中表的某些列,此处需配置MaxCompute project,table和column(元数据来源于project explorer窗口和warehouse下的Mock项目):
注意:图中Table columns是UDF的入参,如果是加法函数,则这里需要输入两个字段。
2.点击OK后,通过tunnel自动下载用户指定表的sample数据到本地warehouse目录(若之前已下载过,则不会再次重复下载,否则利用tunnel服务下载数据。默认下载100条,如需更多数据测试,请自行使用console的tunnel命令或者studio的表下载功能)。下载完成后,用户可以在warehouse目录看到下载的sample数据。这里用户也可以使用Mock data(即warehouse里的数据自己mock,具体可参考java udf开发中的“关于本地运行的warehouse目录”部分)。
3.然后本地运行框架会根据用户指定的列,获取data文件里指定列的数据,调用UDF本地运行。(本地运行是通过pyodps的pyou脚本实现的,命令类似如下pyou hello.Plus < data。安装完pyodps后可以检查下该脚本是否存在,windows: ${python}/../Scripts/pyou, mac:${python}/../pyou)。用户可以在控制台看到结果打印,也可以在UDF上打断点调试,如下图:
3.3 注册发布
Python UDF测试通过后,就可以注册发布到生产上使用了,先Add Resource,然后Create Function即可。
3.3.1上传py文件
1.在MaxCompute菜单选择Add Resource菜单项:
2.选择要上传到哪个MaxCompute project上,py文件路径,要注册的资源名,以及当资源或函数已存在时是否强制更新,然后点击OK。
3.上传成功后,可以在project explorer窗口的resources节点下看到该资源。
3.3.2注册UDF
py文件上传完成后,就可以注册UDF函数了。
1.在MaxCompute菜单选择Create Function菜单项。
2.选择需要使用的资源py文件,py文件的主类,输入函数名,然后点击OK。
图中函数名处可以自己给函数取一个名字。类名是.py资源名去掉后缀的部分和python代码中的类名,本例中为"hello.hello",使用的资源即是python文件名hello.py。
3.注册成功后,可以在project explorer窗口的functions节点下看到该函数。
3.4 使用UDF
接下来就可以在SQL中使用新编写的UDF完成后续开发。
4.附录
4.1.安装pip(给/usr/bin/python)
用easy_install pip安装每次都安装到了anaconda Python下面,没有安装到/usr/bin/python下面。最终用get-pip.py文件成功给/usr/bin/python安装上了pip,具体的操作是:下载get-pip.py文件: wget bootstrap.pypa.io/get-pip.py
。 如果没有wget, 那么brew install wget。如果没有brew 安装brew:https://brew.sh/
接着安装pip: sudo /usr/bin/python ~/get-pip.py
。至此/usr/bin/python的pip就安装成功了。如果要安装pyodps,可以运行: sudo /usr/bin/python -m pip install pyodps
4.2.创建函数时提示/usr/bin/python没有安装pyodps的问题
在create function时如果弹出窗口提示:/usr/bin/python没有安装pyodps,如下图所示:
需要按照2.2中所述的指引给/usr/bin/python安装pyodps,然后再重复创建函数即可。
(当前版本的studio在create function时会默认检查/usr/bin/python没有安装pyodps,不能指定其他路径的Python,比如anaconda python。studio同学说自后续发布的3.0.0版本中会加入可以选择Python路径的新特性。)