在笔者之前的一系列Blog中,介绍了如何整合SAP HANA与R语言(参考http://scn.sap.com/community/chinese/hana/blog/2014/02/14/r%E8%AF%AD%E8%A8%80%E5%8C%85%E5%AE%89%E8%A...), 以及使用SAP HANA中的PAL库(http://scn.sap.com/community/chinese/hana/blog/2014/03/10/sap-hana%E4%B8%ADpal%E7%AE%97%E6%B3%95%E4%...).
具体来说, 二者在功能上有很多相似的地方. PAL主要是一系列的预测分析算法, 而这些算法通常在R语言中也有对应的实现, 但一般来说, 因为R是一个开源的语言包, 所包含的工具与算法比PAL中要多得多.
在实现方式上,SAP HANA整合R需要引入一个Rserve服务端, 然后SAP HANA通过TCP/IP去访问Rserve, 存在数据传输的开销问题. 而PAL直接在SAP HANA内部进行计算, 因此, 直观上使用PAL的性能要比整合R的方式要好. 所以, 当所需要的算法在PAL中存在的情况下,相用PAL是一个较好的选择.
本文将通过对同一数据集合, 使用不同的方式进行K-Means聚类分析来比较PAL与R整合的性能.
一 数据准备
本文使用一个Procedure来生成测试数据, 结果用一张物理表进行存储.
数据表定义如下:
字段名称 | 描述 |
ID | 点编号 |
ATTRIB1 | 属性1,Double类型 |
ATTRIB2 | 属性2,Double类型 |
CID | 指定类簇ID |
Procedure调用方式如下:
call GENDATAFORPAL(arg1,arg2,arg3) with overview;
arg1:生成的类簇个数(n表示n+1个)
arg2:每个类簇点集个数
arg3:结果表名
例如:
call GENDATAFORPAL(3,100,PAL_DATA_TBL) with overview;
将生成4个类簇,每个类簇100个点.
代码细节见附件gendata.txt
二 R整合的方式进行K-Means聚类
配置SAP HANA整合R的环境, 然后使用R语言编写存储过程.
|
代码细节见附件r-kmeans.txt
三 使用PAL进行K-Means聚类
PAL中包含了K-Means聚类算法, 具体的调用步骤见附件pal-kmeans.txt
四 结果比较
在实验中,分别改变每簇点集的数量, 即改变数据量的大小, 然后分别用两种方式进行聚类分析, 其结果如下:
序号 | 类簇数量 | 每簇点数 | R整合耗时 | PAL耗时 |
实验一 | 4 | 1000 | 334ms | 51ms |
实验二 | 4 | 10000 | 476ms | 85ms |
实验三 | 4 | 100000 | 1.79s | 366ms |
实验四 | 4 | 1000000 | 12.2s | 3.52s |
从中可以看出, PAL的性能确实比R整合方式要好大概4到6倍.
在实际运用中,R语言比较灵活, 第三方的工具算法比较多,但是性能较差, PAL的性能较好,但是受限于PAL的库, 只有一些经典的算法才有对应的实现, 有可能需要用的算法PAL中不存在. 所以具体情况还需要视情况而定.
[本文的测试案例所使用的SAP HANA版本为SAP HANA SPS8 Revision 81.00]
想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!
转载请注明出处,
请勿用于商业用途.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
13 | |
11 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
5 | |
5 |