tan张丹 R和Hadoop的另一个解决方案:Pattern
原来有两天秋假,于是又有时间跟大家扯扯了。
R一直以来被人诟病的一个问题就是内存计算,在这个所谓的“大数据”时代,这个问题让R显得很尴尬。大数据时代最火的平台是什么?必须是hadoop。这年头不知道这玩意都不好意思跟别人打招呼。Revolution开发的rhadoop算是把R跑在hadoop集群上的完整解决方案,具体的环境搭建和实践请参考张丹(应该是个名字吧)的博客。
但实话实说,这个方案的门槛还是略高的,毕竟我身边很多R用户都不是CS科班出身。今天咱扯扯R和hadoop的另一个解决方案:Pattern。顺便举个简单的例子,怎么在hadoop上跑个随机森林。
在说这个方案之前,咱们先聊聊PMML,毕竟Pattern是通过PMML实现的。
PMML全称是Predictive Model Markup Language,由Data Mining Group开发,更多细节大家可以参考wiki上的介绍。Data Mining Group,可以认为是一个数据挖掘方面的标准委员会,PMML就是他们在推广的标准之一。
从名字上就可以知道,PMML是种基于XML的格式标准,它的主要目的就是用来描述模型和算法。而PMML标准制定的主要目的就是让不同的软件之间可以交换模型,比如我用R写了一个算法模型,导出成PMML,SAS系统可以通过的Enterprise Miner导入PMML,直接使用我所构造的模型来处理数据,而不需要再从头用SAS语言实现这个模型。这就为不同系统之间的交互提供了极大的便利。
那很值得关心的两个问题就是,PMML支持多少中模型的导出和现有软件里有多少支持PMML。PMML的最新标准是4.1,所支持的模型可以在这里查到。虽然支持的模型可能还相对有限,但常规的时间序列、SVM和各种回归还是都没什么问题的。而数据挖掘领域的主流软件几乎都支持PMML,不过支持到的版本不同,也就是支持导入的模型种类不同。从列表里可以看到大家熟悉的各大厂商的产品,SAS、SPSS、IBM的InfoSphere Warehouse、微软的SQLserver和Teradata的Warehouse Miner,还有就是今天要提到的Hadoop。
大家想象一下,我在R里构造一个模型,导出PMML,直接丢到hadoop集群上,我不需要对MadReduce有什么了解,这个算法就在集群上跑了起来。是不是很让人激动?Pattern要做的就是这个激动人心的事情。
今年在Chicago的KDD上有一个PMML专门的workshop,就在这个workshop上,有人放出了hadoop的PMML接口,也就是Pattern,这也几乎成为了本次workshop最大的亮点。
Pattern通过Hadoop的Cascading API实现,我不是科班出身,所以我就不聊这些了。Pattern的源代码在此,现在支持的模型有General Regression、Regression、Clustering、Tree和这些模型的组合,比如Random Forest。SVM和神经网络还在开发之中。
环境配置应该说非常简单,各位装好Hadoop和Gradle,并设置好相关的环境变量就好了。之后从github上下载源代码,gradle clean jar编译即可,依赖库在编译时会自动下载。
这里给大家看的是Pattern自带的一个随机森林的例子,首先是R代码,注意一下最后导出PMML文件就好了,因为代码着实太简单了。
有了这个sample.rf.xml,我们就可以去hadoop上跑随机森林了,命令和输出结果如下:
最后的输出有两个文件,一个part-00000是随机森林的结果,和一个_SUCCESS,证明我们的确成功运行了。
特别提一点,Rattle也可以导出PMML的。也就是说,Rattle下点点鼠标导出个模型,之后就可以丢到集群上跑了,门槛不能更低了吧?!