(转)使用Java和R搭建统计分析server端
2013-06-01 20:05
387 查看
原文地址:http://www.douban.com/note/85247917/
大家转载也说明原文地址,尊重作者的劳动成果!
摘要:使用R搭建统计分析服务器,Java通过TCP/IP协议来与R服务器交互,输入分析数据及参数,获得统计分析结果。
步骤:
1. 搭建Rserve服务器,从而可以监听统计分析请求
参考文章:R与JAVA的整合 (http://www.lijian001.com/r/blog_comment.asp?article_id=199)
安装 R :$ sudo apt-get install r-base
启动并进入R环境:$ R
安装Rserve包:> install.packages("Rserve")
加载Rserve包:> library("Rserve")
启动Rserve(默认为demon方式启动): > Rserve
至此R这一端的准备工作已经就绪,Rserve启动后即使用q()退出R环境,Rserve也依旧运行。
2. 下载Rserve的jar包,这样可以直接调用已经做好的API,而不需要纠缠于R端的TCP/IP协议
地址:http://www.rforge.net/Rserve/files/
jar包共有两个:REngine.jar和RserveEngine.jar,目前还没弄清楚为什么不能把API放到一个jar包里来方便部署。
3. 编写Java代码来调用Rserve
最简单的几个调用方法:
//将数组赋值给某个变量
RConnection.assign("dataA", arrayObject);
// 此处dataA和dataB为两个数组变量名,这一语句将对dataA和dataB两组数据进行t检验,并返回R端相应的console输出。
RConnection.eval("paste(capture.output(print(t.test(" + dataA + "," + dataB + "))),collapse=\"\\n\")").asString()
//还可以将R中的plot图片导到Java中来,下面代码中返回的byte数组对象可以通过FileOutputStream来输出到一个jpg文件。这段代码应该还有不少可以优化的地方,但是我一时找不到tmp.jpg的存放路径,只好作罢:
public static byte[] boxplot(RConnection c, String dataAName, String dataBName) throws REXPMismatchException, REngineException{
String device = "jpeg";
REXP xp = c.parseAndEval("try(" + device + "('tmp.jpg',quality=90))");
c.parseAndEval("boxplot(" + dataAName + "," + dataBName + "); dev.off()");
xp = c.parseAndEval("r=readBin('tmp.jpg','raw',1024*1024); unlink('tmp.jpg');r");
return xp.asBytes();
}
后记:还有一种搭建方式是利用R本身的动态链接库来直接调用分析方法,我个人偏好client/server这种方式,因为感觉这样分层清晰,一旦出问题了也容易定位bug。
大家转载也说明原文地址,尊重作者的劳动成果!
摘要:使用R搭建统计分析服务器,Java通过TCP/IP协议来与R服务器交互,输入分析数据及参数,获得统计分析结果。
步骤:
1. 搭建Rserve服务器,从而可以监听统计分析请求
参考文章:R与JAVA的整合 (http://www.lijian001.com/r/blog_comment.asp?article_id=199)
安装 R :$ sudo apt-get install r-base
启动并进入R环境:$ R
安装Rserve包:> install.packages("Rserve")
加载Rserve包:> library("Rserve")
启动Rserve(默认为demon方式启动): > Rserve
至此R这一端的准备工作已经就绪,Rserve启动后即使用q()退出R环境,Rserve也依旧运行。
2. 下载Rserve的jar包,这样可以直接调用已经做好的API,而不需要纠缠于R端的TCP/IP协议
地址:http://www.rforge.net/Rserve/files/
jar包共有两个:REngine.jar和RserveEngine.jar,目前还没弄清楚为什么不能把API放到一个jar包里来方便部署。
3. 编写Java代码来调用Rserve
最简单的几个调用方法:
//将数组赋值给某个变量
RConnection.assign("dataA", arrayObject);
// 此处dataA和dataB为两个数组变量名,这一语句将对dataA和dataB两组数据进行t检验,并返回R端相应的console输出。
RConnection.eval("paste(capture.output(print(t.test(" + dataA + "," + dataB + "))),collapse=\"\\n\")").asString()
//还可以将R中的plot图片导到Java中来,下面代码中返回的byte数组对象可以通过FileOutputStream来输出到一个jpg文件。这段代码应该还有不少可以优化的地方,但是我一时找不到tmp.jpg的存放路径,只好作罢:
public static byte[] boxplot(RConnection c, String dataAName, String dataBName) throws REXPMismatchException, REngineException{
String device = "jpeg";
REXP xp = c.parseAndEval("try(" + device + "('tmp.jpg',quality=90))");
c.parseAndEval("boxplot(" + dataAName + "," + dataBName + "); dev.off()");
xp = c.parseAndEval("r=readBin('tmp.jpg','raw',1024*1024); unlink('tmp.jpg');r");
return xp.asBytes();
}
后记:还有一种搭建方式是利用R本身的动态链接库来直接调用分析方法,我个人偏好client/server这种方式,因为感觉这样分层清晰,一旦出问题了也容易定位bug。
相关文章推荐
- 使用Java和R搭建统计分析server端
- web server使用情况统计与分析(Apache Nginx)
- 在eclipse开发环境中使用Java搭建OAuth Server和OAuth Client
- Drools入门-----------环境搭建,分析Helloworld Drools5.0的xls文件转drl文件提升解析效率 使用BRMS的Tomcat6.0配置
- 使用Java实现简单的server/client回显功能的方法介绍
- 使用myeclipse启动tomcat时出现这种错误“Could not publish to the server. java.lang.NullPointerException”
- Java集合:ArrayList使用详解及源码分析
- java数据库编程:使用元数据分析数据库
- Java中的Enum的使用与分析
- 日志分析利器splunk的搭建、使用、破解
- Java使用SQLServerBulkCopy实现数据库批量操作
- Windows下使用FileZilla[Server+Client]搭建FTP服务
- Java基础篇多线程概念和使用原理分析
- 【软件工程技术之程序版本控制】SVN的使用——基本知识,Server搭建与Client日常使用维护
- Windows下使用VisualSVN Server搭建SVN服务器
- Java/Android引用类型及其使用分析
- 聊聊并发(三)Java线程池的分析和使用
- 使用开源软件快速搭建数据分析平台
- Windows下使用VisualSVN Server搭建SVN服务器