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的一些小看法,希望大家指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM