Rserve與Java的跨平臺通訊

R的極客理想系列文章,涵蓋了R的思想,使用,工具,創新等的一系列要點,以我我的的學習和體驗去詮釋R的強大。 java

R語言做爲統計學一門語言,一直在小衆領域閃耀着光芒。直到大數據的爆發,R語言變成了一門煊赫一時的數據分析的利器。隨着愈來愈多的工程背景的人的加入,R語言的社區在迅速擴大成長。如今已不單單是統計領域,教育,銀行,電商,互聯網….都在使用R語言。 linux

要成爲有理想的極客,咱們不能停留在語法上,要掌握牢固的數學,機率,統計知識,同時還要有創新精神,把R語言發揮到各個領域。讓咱們一塊兒動起來吧,開始R的極客理想。

關於做者: 程序員

轉載請註明出處:
http://blog.fens.me/r-rserve-java/ redis

rserve-java

前言 apache

如今主流的異構跨平臺通訊組件Apache Thrift已經火遍大江南北,支持15種編程語言,可是到目前爲止尚未加入R語言。要讓R實現跨平臺的通訊,就只能從R的社區中找方案,像rJava,RCpp,rpy都是2種語言結合的方案,這些方案相似地會把R引擎加載到其餘的語言內存環境。優勢是高效,缺點是緊耦合,擴展受限,接口程序沒法重用。 編程

Rserve給了咱們一種新的選擇,抽象R語言網絡接口,基於TCP/IP協議實現與多語言之間的通訊。讓咱們體驗一下Rserve與Java的跨平臺通訊。 網絡

目錄 架構

  1. Rserve介紹
  2. Rserve安裝
  3. Java遠程鏈接Rserve

1. Rserve介紹

Rserve是一個基於TCP/IP協議的,容許R語言與其餘語言通訊的C/S結構的程序,支持C/C++,Java,PHP,Python,Ruby,Nodejs等。 Rserve提供遠程鏈接,認證,文件傳輸等功能。咱們能夠設計R作爲後臺服務,處理統計建模,數據分析,繪圖等的任務。 tcp

2. Rserve安裝

系統環境:
Linux Ubuntu 12.04.2 LTS 64bit server
R 3.0.1 64bit 編程語言

~ uname -a
Linux conan 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

~ cat /etc/issue
Ubuntu 12.04.2 LTS \n \l

~ R --version
R version 3.0.1 (2013-05-16) -- "Good Sport"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see

http://www.gnu.org/licenses/.

Rserve安裝

#建議使用root權限安裝
~ sudo R

> install.packages("Rserve")
installing via 'install.libs.R' to /usr/local/lib/R/site-library/Rserve
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (Rserve)

啓動Rserve

~ R CMD Rserve

R version 3.0.1 (2013-05-16) -- "Good Sport"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

Rserv started in daemon mode.

#查看進程
~ ps -aux|grep Rserve
conan     7142  0.0  1.2 116296 25240 ?        Ss   09:13   0:00 /usr/lib/R/bin/Rserve

#查看端口
~ netstat -nltp|grep Rserve
tcp        0      0 127.0.0.1:6311          0.0.0.0:*               LISTEN      7142/Rserve

這時Rserve已經啓動,端口是6311。接下來,咱們來簡單地用一下。

Java遠程鏈接Rserve

1). 遠程鏈接Rserve
剛剛啓動時,使用的本地模式,若是想運程鏈接須要增長參數 –RS-enable-remote

#殺掉剛纔的Rserve守護進程
~ kill -9 7142

#打開遠程模式從新啓動
~ R CMD Rserve --RS-enable-remote

#查看端口
~ netstat -nltp|grep Rserve
tcp        0      0 0.0.0.0:6311            0.0.0.0:*               LISTEN      7173/Rserve

0 0.0.0.0:6311,表示不限IP訪問了。

2). 下載Java客戶端JAR包
下載Java客戶端JAR包:http://www.rforge.net/Rserve/files/

  • REngine.jar
  • RserveEngine.jar

3). 建立Java工程
在Eclipse中新建Java工程,並加載JAR包環境中。
rserve1

4). Java編程實現

package org.conan.r.rserve;

import org.rosuda.REngine.REXP;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;

public class Demo1 {

    public static void main(String[] args) throws RserveException, REXPMismatchException {
        Demo1 demo = new Demo1();
        demo.callRserve();
    }

    public void callRserve() throws RserveException, REXPMismatchException {
        RConnection c = new RConnection("192.168.1.201");
        REXP x = c.eval("R.version.string");
        System.out.println(x.asString());//打印變量x

        double[] arr = c.eval("rnorm(10)").asDoubles();
        for (double a : arr) {//循環打印變量arr
            System.out.print(a + ",");
        }
    }
}

5). 運行結果

R version 3.0.1 (2013-05-16)
1.7695224124757984,-0.29753038160770323,0.26596993631142246,1.4027325257239547,-0.30663565983302676,-0.17594309812158912,0.10071253841443684,0.9365455161259986,0.11272119436439701,0.5766373030674361,

經過Rserve很是簡單地實現了,Java和R的通訊。
解決了通訊的問題,咱們就能夠發揮想象,把R更普遍的用起來。

接下來,會講到如何設計Java和R互相調用的軟件架構。敬請關注….

轉載請註明出處:
http://blog.fens.me/r-rserve-java/

相關文章
相關標籤/搜索