在笔者之前的一系列Blog,介绍了如何整合SAP  HANAR语言(参考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%A3%85%E5%B9%B6%E5%AE%9E%E7%8E%B0%E4%B8%8Ehana%E7%9A%84%E6%95%B4%E5%90%88), 以及使用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%BD%BF%E7%94%A8%E5%85%A5%E9%97%A8).

            具体来说, 二者在功能上有很多相似的地方. PAL主要是一系列的预测分析算法, 而这些算法通常在R语言中也有对应的实现, 但一般来说, 因为R是一个开源的语言包, 所包含的工具与算法比PAL中要多得多.

            在实现方式上,SAP HANA整合R需要引入一个Rserve服务端, 然后SAP HANA通过TCP/IP去访问Rserve, 存在数据传输的开销问题. PAL直接在SAP HANA内部进行计算, 因此, 直观上使用PAL的性能要比整合R的方式要好. 所以, 当所需要的算法在PAL中存在的情况下,相用PAL是一个较好的选择.

            本文将通过对同一数据集合, 使用不同的方式进行K-Means聚类分析来比较PALR整合的性能.

  数据准备


    本文使用一个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语言编写存储过程.

CREATE PROCEDURE KMEANSWITHR(IN data PAL_KMEANS_DATA_T,IN arg RARG_T,OUT res RCLRES_T)

LANGUAGE R

AS

BEGIN

     library(hash);

     args<-hash(arg$ARGNAME,arg$ARGVALUE);

     idcol<-data$ID;

     cl_num<-0;

     if(is.null(args$cl_num)){

          cl_num<-3;

     }else{

          cl_num<-strtoi(args$cl_num);

     }

     mdf<-data.frame(X1=data$ATTRIB1,X2=data$ATTRIB2);

     cls<-kmeans(mdf,cl_num);

     clno<-cls$cluster;

     res<-data.frame(ID=idcol,CLUSTER_ID=clno)

END;

代码细节见附件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整合方式要好大概46.

         在实际运用中,R语言比较灵活, 第三方的工具算法比较多,但是性能较差, PAL的性能较好,但是受限于PAL的库, 只有一些经典的算法才有对应的实现, 有可能需要用的算法PAL中不存在. 所以具体情况还需要视情况而定.

[本文的测试案例所使用的SAP HANA版本为SAP HANA SPS8 Revision 81.00]

想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!

转载请注明出处,

http://scn.sap.com/community/chinese/hana/blog/2014/09/03/sap-hana%E6%95%B4%E5%90%88r%E7%9A%84%E6%80%A7%E8%83%BD%E4%B8%8…

请勿用于商业用途.

To report this post you need to login first.

3 Comments

You must be Logged on to comment or reply to a post.

Leave a Reply