关于R与javaWeb通信问题

来源:互联网 发布:鼎复数据 知乎 编辑:程序博客网 时间:2024/04/30 05:21

首先,本文是对以下文章的反馈和补充:

http://www.bubuko.com/infodetail_70814.html

一、选取什么插件作为java和R之间的通信?

  1. 在传统的方式中,大致可以分为两类:一类是JRI的模式,另一种是Rserve模式。JRI模式实际上是一种嵌入式的模式,二Rserve是一种远程调用模式。

  在这两种方式中,各有优缺点:

  1.1 JRI(嵌入式模式)我体会到最大的优点是它对中文的支持较好,但是使用JRI模式下很容易造成整个系统的崩溃,比如在java调用R的时候,中间出现了异常或者错误,这些错误大致都是致命的,导致java虚拟机崩溃,从而导致整个系统崩溃,这是一个可怕的噩梦。

  1.2 Rserve(远程通信模式) 在这种通信模式下,最大的优点是javaWeb项目不需要去维护R的运行,通过TCP/IP协议直接进行通讯,但是有一个很大的缺点是它对中文的支持很弱,尤其是在windows的环境中。基本是不支持中文的,在linux环境下,似乎对中文的支持稍微好些。不是完全支持中文的话,对返回有中文或者输入有中文的系统将是不可用的。

  小结:在项目的开发中,我首先使用的是JRI模式,将项目部署以后,经常出现崩溃问题,所以最终还是放弃了JRI调用模式,随之使用了Rserve远程调用模式,虽然不支持中文,但是项目本身的传参是没有中文的,返回的数据都由R处理以后,返回数据库,只返回一个状态量给web服务器。


由于在自己的项目中,需要利用javaWeb技术更好的展现R的分析计算能力,鉴于以上作者对于JRI以及Rserve利弊的分析。虽然,项目中中文的处理还算比较多,现在的设计就需要将中文参数传递不断的修改为可行的状态,而将输出的结果保存到文件或者数据库中,在以后的实践中会不断更新完善。

再提一个问题,用R做大量文本的计算,内存是个问题。


2015-10-9

今天的测试结果,以下语句会在java程序中调用eval函数出错:

1. 由于中文的冒号出错

cat(c("程序执行日期:",as.character(Sys.Date()),"\n"),file = filepath.wortxt,append = TRUE) ###错误

cat(c("程序执行日期",as.character(Sys.Date()),"\n"),file = filepath.wortxt,append = TRUE)     ###正确

2.paste中包含中文,将其结果作为参数传给其他函数出错

cat(c("形成DTM所用时间为",substring(str.time.all,20,nchar(str.time.all)),"\n"),file = filepath.fortxt,append = TRUE)###正确

而将其中的---"形成DTM所用时间为",substring(str.time.all,20,nchar(str.time.all))---部分直接使用paste函数粘合之后,传递到上一句的c()函数中出错




0 0
原创粉丝点击