JAVA 调用 R 语言之升华篇

由于项目的需要,最近做了一个javaWeb调用R的组件,在这里,我把自己走的一些弯路给大家总结一下:

一、选取什么插件作为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服务器。

二、项目架构

  项目构架中将java调用R的部分独立出来作为一个独立的模块,这里可以看做是一个适配器模式。这样即使R-WEB服务器出现致命的错误,也不会影响WEB项目的正常运行。

这样设计的话,R-WEB服务器为WEB项目提供数据接口,WEB项目通过http协议间接调用R。

  以上是我对JAVA调用R的一些小看法,希望大家指正。

原文地址:https://www.cnblogs.com/divenswu/p/3593732.html