用MaxCompute Studio开发Python UDF(附采坑记录)

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介:

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插件并安装。
image.png

2.4配置Python依赖

配置studio module对python的依赖,这样就可以使用进行MaxCompute python开发了。

  • File -> Project structure,添加python sdk:
    image.png
  • File -> Project structure,添加python facets:
    image.png
  • File -> Project structure,配置module依赖python facets:
    image.png

3.开发Python UDF

3.1 开发

  1. 右键 new | MaxCompute Python,如果没有MaxCompute Python选项说明没有安装好Python插件,参考前文所述的安装指引。
    image.png
  2. 输入类名,如hello,选择类型,这里我们选择UDF,点击OK。
    image.png
  3. 模板已自动填充框架代码,您只需要编写UDF的入参出参,以及函数逻辑。
    image.png

3.2 测试

UDF开发好后,下一步就是要测试自己的代码,看是否符合预期。我们支持下载表的部分sample数据到本地运行,进行debug,步骤如下:

  1. 在Editor中UDF类上右键,点击”运行”菜单,弹出run configuration对话框。UDF|UDAF|UDTF一般作用于select子句中表的某些列,此处需配置MaxCompute project,table和column(元数据来源于project explorer窗口和warehouse下的Mock项目):
    image.png

注意:图中Table columns是UDF的入参,如果是加法函数,则这里需要输入两个字段。

2.点击OK后,通过tunnel自动下载用户指定表的sample数据到本地warehouse目录(若之前已下载过,则不会再次重复下载,否则利用tunnel服务下载数据。默认下载100条,如需更多数据测试,请自行使用console的tunnel命令或者studio的表下载功能)。下载完成后,用户可以在warehouse目录看到下载的sample数据。这里用户也可以使用Mock data(即warehouse里的数据自己mock,具体可参考java udf开发中的“关于本地运行的warehouse目录”部分)。
image.png

3.然后本地运行框架会根据用户指定的列,获取data文件里指定列的数据,调用UDF本地运行。(本地运行是通过pyodps的pyou脚本实现的,命令类似如下pyou hello.Plus < data。安装完pyodps后可以检查下该脚本是否存在,windows: ${python}/../Scripts/pyou, mac:${python}/../pyou)。用户可以在控制台看到结果打印,也可以在UDF上打断点调试,如下图:
image.png

3.3 注册发布

Python UDF测试通过后,就可以注册发布到生产上使用了,先Add Resource,然后Create Function即可。

3.3.1上传py文件

1.在MaxCompute菜单选择Add Resource菜单项:
image.png

2.选择要上传到哪个MaxCompute project上,py文件路径,要注册的资源名,以及当资源或函数已存在时是否强制更新,然后点击OK。
屏幕快照 2018-05-03 上午10.08.19.png

3.上传成功后,可以在project explorer窗口的resources节点下看到该资源。
屏幕快照 2018-05-03 上午10.11.14.png

3.3.2注册UDF

py文件上传完成后,就可以注册UDF函数了。
1.在MaxCompute菜单选择Create Function菜单项。
image.png

2.选择需要使用的资源py文件,py文件的主类,输入函数名,然后点击OK。
屏幕快照 2018-05-03 上午10.16.00.png
图中函数名处可以自己给函数取一个名字。类名是.py资源名去掉后缀的部分和python代码中的类名,本例中为"hello.hello",使用的资源即是python文件名hello.py。

3.注册成功后,可以在project explorer窗口的functions节点下看到该函数。
屏幕快照 2018-05-03 上午10.18.40.png

3.4 使用UDF

接下来就可以在SQL中使用新编写的UDF完成后续开发。
屏幕快照 2018-05-03 上午10.21.54.png

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,如下图所示:
图片.png
需要按照2.2中所述的指引给/usr/bin/python安装pyodps,然后再重复创建函数即可。
(当前版本的studio在create function时会默认检查/usr/bin/python没有安装pyodps,不能指定其他路径的Python,比如anaconda python。studio同学说自后续发布的3.0.0版本中会加入可以选择Python路径的新特性。)

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
4天前
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
|
16天前
|
IDE 测试技术 开发工具
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
125 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
|
5天前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
30天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
93 5
|
2月前
|
JSON API 数据格式
如何使用Python开发天猫获得淘宝买家秀API接口?
本文介绍了如何使用Python开发天猫和淘宝买家秀API接口,包括注册开放平台账号、创建应用获取API权限、构建请求URL、发送请求获取响应及解析数据等步骤,帮助开发者高效获取和处理商品信息与用户评价数据。
44 0
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
21天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
105 80
|
2月前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
153 59
|
10天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
30 14