Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos

     在笔者之前的一系列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%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聚类分析来比较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...

请勿用于商业用途.

4 Comments