浅谈PyODPS

摘要:在我看来,PyODPS就是阿里云上的Python。值得注意的是,这里的定语“阿里云上的”一定不能精简掉,因为PyODPS不等于单机版的Python!

点此查看原文

目录

我眼中的PyODPS

安装和升级PyODPS版本

PyODPS的牛刀小试

未来更精彩

1. 我眼中的PyODPS

返回目录

简单来说,PyODPS就是在MaxCompute中用编程语言的方式对存储在阿里云DataWorks上的数据表作数据预处理和机器学习的Python API。好像还是有点啰嗦,再精简一下,PyODPS就是阿里云上的Python。值得注意的是,这里的定语“阿里云上的”一定不能精简掉,因为PyODPS不等于单机版的Python!就像是在Spark平台上的PySpark不等于单机版的Python一样。在表面上看,一个很大的区别就是单机版的Python语言只能在单机上做数据处理和机器学习,但是PyODPS和PySpark一样,都是在集群上做数据处理和机器学习的。而我更愿意从编程语言的角度去看待PyODPS,就像Clojure, Common Lisp, Elisp, Scheme等被称为是Lisp编程语言的不同方言一样,我更喜欢把PyODPS和PySpark理解成是Python的方言。虽然这样理解很不严谨,因为毕竟PyODPS和PySpark都分别需要在连接阿里云的本地PC和Spark平台中的各节点上预先安装Python。之所以突出强调这一不同点,就是想让大家提前留意到在使用PyODPS处理阿里云上的数据表和建模时,很多编程的语法是与单机版Python不同的。例如下面这样一个读取本地文件的简单使用场景中,PyODPS与单机版Python的语法就不相同。

使用单机版Python读取本地文件


使用PyODPS读取本地文件


这只是一个很简单的区别,在实际的工作中还会有许多语法上不同的地方,等待大家去发现,去体会。不过先要有将PyODPS与单机版Python区分开的意识,有了这样的意识,在上云过程中,如果将之前本地机器上处理数据库或数据表的单机版Python代码移植进PyODPS中,输出结果出现异常或者发生报错时,就会考虑先从代码语法层面去排查问题,之后再查找ETL等其他可能的原因。而且有了这样的意识之后,也会自觉编写符合PyODPS语法的代码,从而更加有效的利用MaxCompute卓越的计算性能。

提起与底层平台计算性能相关话题的时候,我总是感触良多。按照我上述不太严谨的说法,PyODPS与PySpark虽然都能称作是Python的两门方言,但是他们所依托的平台真的是有亲娘跟后妈的天壤之别!我由于工作需要,所以在阿里云上的项目和本地集群的项目都有参与,才让我有了亲娘和后妈这两种反差很大的用户体验。

还是先从让人心情愉悦的这个说起吧。PyODPS,我们的主角,阿里云的MaxCopute对PyODPS来说,简直就像亲娘一样,无微不至的关怀,全心全意的支持。使用PyODPS的感觉就是一个字:省心!只要你连接阿里云的这台PC上预先安装了Python,无论你安装的是Python2还是Python3,只要使用命令行终端,输入“pip install pyodps”命令便可安装PyODPS。之后在你喜欢使用的任意一款Python IDE中(我比较喜欢的是Jupyter Notebook)输入以下命令就可以直接使用MaxCompute平台了。一切就是这么自然!

from odps import ODPS

o = ODPS(access_id='$$$$$$$$$$$$$$ ',

        secret_access_key='*********************',

        project='xxx',

        end_point='https://service.odps.aliyun.com/api')

而且PyODPS的版本更新完全向下兼容,只要在新版本推出之后,用本地PC的命令行终端,输入“pip install -U pyodps”命令更新版本就行了。完全不用考虑任何版本兼容问题!而且PyODPS的操作指南也会在以下网址同步更新。真的是省时、省力又省心!

http://pyodps.readthedocs.io/zh_CN/latest/index.html

那么,PySpark的用户体验又是怎样的呢?一句话:小孩没娘,说来话长……先从版本说起吧,从各家企业使用服务器的Linux操作系统开始,版本就开始各不相同了,单就CentOS操作系统来说,我见过的企业就有用CentOS6.4,CentOS6.5,CentOS6.6和CentOS7.2的,这些系统自带的Python2和jdk的版本也都不相同,在拿到这些系统之后,第一件事就是升级jdk到jdk8和将Python2.x升级到Python2.7.13。之后就是选择Hadoop,Spark,Zookeeper,Hive,HBase,Kafka等组件以及Zeppelin等Notebook的版本。

选择完这一大堆组件的版本之后,就开始了安装部署、更改配置、更新依赖包的慢慢征途了。这期间要天天缠着谷哥和度娘问各种各样的部署、配置和依赖问题,而且经常要在各种回答中反复试错N遍之后才能找到一个问题的正解。单就一个在Zeppelin Notebook运行PySpark时出现空指针报错的问题,就耗费了我好几天的时间,而且到现在还没有彻底解决。怎一个心酸了得……

经过了漫长的平台搭建之路,终于到了PySpark登台亮相的时候了,结果这时才发现,用PySpark在Spark这个后妈的平台上工作,还是前路坎坷。就连Spark官网上的PySpark代码,都时常有跑不通的情况发生。我还记得当时要把从HBase中读取的RDD格式数据转换成DataFrame时,官网上的PySpark语句是跑不通的,在谷哥和度娘上查到的语句也都跑不通,最后我花了大概两天的时间才把这个功能跑通,当时那种深深的绝望和绝处逢生的喜悦,让我至今仍记忆犹新。单是Spark官网上PySpark代码跑不通的问题,我还可以理解为可能是由于版本不兼容问题造成的。可是之后这个问题,就真的是明目张胆的后妈行为了。到了Spark的Datasets数据结构,以及图计算部分的GraphX,完全抛弃了PySpark,就只剩下她的亲儿子Scala了。这还能不能过了?

每当这个时候,我都会想起和PyODPS一同奋战的峥嵘岁月。只要两句话,他就会把整个MaxCompute集团都拉过来跟你一起干,在你迷茫或找不准方向的时候,钉钉群(群名称: PyODPS 技术支持,群号: 11701793)里的专家和军师们会为你指点迷津,与你一同并肩在PB甚至是TB量级的各种海量数据战场上杀出一条血路!一条胜利之路!这,就是我眼中的PyODPS!

2. 安装和升级PyODPS版本

返回目录

2-1. 安装

PyODPS对Python2和Python3版本都是兼容的。这里我推荐安装Anaconda的Python2或者Python3,因为安装Anaconda时,会默认安装许多Python常用的第三方库,免去你后续查找和安装各个第三方库的烦恼,而且Anaconda中安装的Jupyter Notebook正是我使用PyODPS时非常顺手的编辑器,另外Anaconda的Spyder也是非要好用的Python代码编辑器。

使用命令行终端,输入“pip install pyodps”命令即可完成安装。如下图所示。


2-2. 升级

使用命令行终端,输入“pip install -U pyodps”即可完成升级。如下图所示。


3. PyODPS的牛刀小试

返回目录

当数据表存储到DataWorks之后,PyODPS就可以对表中的数据进行数据预处理了。这里以一份1993年Auto MPG Data Set开源数据集为例,做一个简单的Demo。(此数据集的下载地址为:http://archive.ics.uci.edu/ml/datasets/Auto+MPG)

前提是我们已经将此数据集导入到DataWorks当中,之后操作PyODPS做数据处理和机器学习的具体姿势如下:

3-1. 通过PyODPS,从DataWorks中读入数据表,并转换成DataFrame格式。如下图所示。从图中我们可以看到,使用的是最新版0.7.13版本的PyODPS,并且读入的数据表有398条记录。


3-2. 查看数据表。如下两图所示。从这两张图中,我们可以看到这张表共有9列字段,并且在“horsepower”字段中出现了以问号填充的脏数据。这是我们要首先去除掉的。


3-3. 去除“horsepower”字段中的问号,并查看处理脏数据后DataFrame的各字段类型。如下图所示。这里,在查看字段类型时,发现由于问号脏数据的出现,导致“horsepower”字段的类型目前为“string”类型。不过也不用着急将这个字段变回整数类型,可以往下再做一些其他的数据处理工作,如果发现有其他字段也需要调整类型的时候,可以在训练模型之前,一并处理。


3-4. 分组、聚合、排序操作。如下图所示。这里是按照一辆汽车安装汽缸的数量进行分组;并按照不同汽缸个数,求汽车燃油效率(以耗费一加仑汽油行驶的英里数作为表征,即mpg字段)的最大值和最小值,以及对装有不同汽缸数量的汽车进行计数;最后按照单辆汽车汽缸的个数进行降序排列。从下图的输出结果中可以看到,并不是汽缸的数量越多,燃油效率就越高,装有4汽缸汽车的燃油效率要高于装有8汽缸的汽车。并且,此表中装有4汽缸和8汽缸的数据记录较多,其他3款的数据记录偏少。由此可知,我们可以将汽缸数量为3,5,6的数据记录去除,将此表构造成可用于二分类算法模型使用的数据表。


3-5. 依次去除汽缸数量为3,5,6的数据记录,并验证剩余数据记录条数。如下图所示。


3-6. 将“horsepower”字段类型装换为整数型,并去除字符串类型字段car_name。如下图所示。


3-7. 设置字段连续性并标注标签字段。如下图所示。


3-8. 归一化,并划分训练集和测试集。如下图所示。


3-9. 检查训练集和测试集的字段类型及属性标识。如下图所示。


3-10. 使用训练集训练逻辑回归模型,并用此模型对测试集进行预测。如下图所示。


3-11. 查看逻辑回归模型对测试集的预测结果及评分。如下图所示。


3-12. 计算此逻辑回归模型的评分及混淆矩阵。如下3图所示。


至此,一轮简单的使用PyODPS进行数据处理及机器学习的完整过程就演示完毕了。这里要说明的一点是,虽然这个模型把测试集中91条记录全部预测正确了,但是这并不是个好消息,反而暴露出由于数据样本过少而导致这个模型存在严重的过拟合现象。不过这只是一个简单地Demo,重在演示使用PyODPS的姿势,而且我个人账号中的余额也不多,就不再增加数据样本了。值得注意的是,在实际的工作中,训练模型所使用的样本数据的数量和质量是非常重要的,而数据预处理和特征工程才决定着算法模型上限的关键步骤。在数据处理这部分,PyODPS依托于MaxCompute平台强大的计算性能,就体现出非常大的优势啦。

4. 未来更精彩

返回目录

啰嗦了这么多,希望大家通过这一轮简单的演示,能对PyODPS的数据处理能力有一个大概的印象,在以后的工作中,能日渐熟练的使用它来处理你的海量数据。

2017年12月20日,在北京云栖大会上,阿里云MaxCompute发布了最新的功能Python UDF,目前已经进入公测阶段(详情见此链接https://yq.aliyun.com/articles/292672)。随着即将到来的Python UDF在MaxComputer平台上的全面开放,我相信PyODPS会在阿里云上的绽放出更加耀眼的光芒,将成为你在阿里云上不可多得的得力助手!

贴心的操作指南也已经同步上线,教大家如何在PyODPS中使用Python UDF。详见如下网址:https://yq.aliyun.com/articles/292672

此时,你已经站在PyODPS的大门口,门后就是阿里云MaxCompute的缤纷世界。我突然想套用papi酱的一句名言,就是:……

你还不推一下啊!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容