• Rserve 实现java与R的互通


    服务器端:     华为弹性云服务器    服务系统:WindowsServer 2012 64bit   Rserve默认端口:6311

    (华为云服务器需要在网络安全组设置入方向规则并指定端口)   

                   java项目所用jar包    REngine.jar    RserveEngine.jar   Rserve.jar

    一、下载安装R

    https://www.r-project.org/

    二、设置系统环境变量

    1、  下载安装以后,设置R相关的环境变量,本机安装(D:RR-3.3.2)

    R_HOME   值为:D:RR-3.3.2

    path  末尾添加 D:RR-3.3.2in;


    配置完成后运行CMD  输入   R   出现如下则R环境配置成功

    三、安装并载入Rserve

    在R中运行  

    >install.packages("Rserve")
    
    >library(Rserve)
    

    四、启动Rserve服务
    将Rserve安装目录D:RR-3.3.2libraryRservelibsx64下三个文件拷到D:RR-3.3.2libraryRservelibsx64下

    方法1、在R中启动Rserve  直接使用Rserve()函数。

    >library(Rserve)
    
    >Rserve()
    
    Starting Rserve..
    
    "D:RR-3.3.2libraryRservelibsx64Rserve.exe"
    

    方法2、在“D:RR-3.3.2libraryRservelibsx64”目录下运行CMD  输入命令 R CMD Rserve --help  出现下图说明Rserve可以启动

    输入R CMD Rserve 成功启动

    需要远程连接需要输入 R CMD Rserve --RS-enable-remote

    五、Rserve的远程配置

    查看Rserve配置

    CMD下输入  R CMD Rserve --RS-settings  出现如下图

        config file: Rserv.cfg  配置文件名称
        working root:  R运行时工作目录 /tmp/Rserv
        port: 6311   通信端口
        local socket: TCP/IP  TCP/IP协议
        authorization: 认证未开启
        plain text password: 不允许明文密码
        passwords file: 密码文件,未指定
        allow I/O: 允许IO操作
        allow remote access: 远程访问未开启
        control commands: 命令控制未开启
        interactive: 允许通信
        max.input buffer size: 文件上传限制262mb
    

     新建txt文本 内容如下

    workdir /tmp/Rserv 
    remote enable 
    fileio enable 
    interactive yes 
    port 6311 
    maxinbuf 262144 
    encoding utf8 
    control enable 
    source start.R 
    plaintext enable
    

     另存为名称为Rserv后缀名为.cfg的Rserv   Rserv.cfg

    上述信息包含了一个start.R脚本。新建R脚本输入

    cat("This is my Rserve!!") 
    print(paste("Server start at",Sys.time())) 
    

     保存并将文件放到该目录下(此脚本用于提示Rserve启动成功)

    建立java工程 导入三个jar包添加到构建路径

    DEMO:

    package com.shengtian.test;
    
    import org.rosuda.REngine.REXPMismatchException;
    import org.rosuda.REngine.Rserve.RConnection;
    import org.rosuda.REngine.Rserve.RserveException;
    
    public class TestRserve {
    
    	public static void main(String[] args) {
    		try
    		{
    			TestRserve tr = new TestRserve();
    			tr.callRserve();
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    	}
    	
    	public void callRserve() throws RserveException,REXPMismatchException
    	{
    		RConnection rcon = new RConnection("114.115.205.210");    //建立远程链接
    		String rv = rcon.eval("R.version.string").asString();     //得到R版本信息
    		double[] arr = rcon.eval("rnorm(10)").asDoubles();        //通过R得到10个随机数返回数组
    		System.out.println(rv);                                   //输出版本信息
    		for(double x:arr)                                         //遍历集合
    		{
    			System.out.println(x);
    		}
    	}
    
    }
    

     运行结果:

  • 相关阅读:
    备胎的养成记KeepAlived实现热备负载
    入坑系列之HAProxy负载均衡
    将Error异常日志从普通日志中剥离
    一步一步在Windows中使用MyCat负载均衡 下篇
    年终的第一篇总结 结束南漂 写在2017
    Android实现TCP断点上传,后台C#服务实现接收
    为什么我会反对大家写工作日报
    ANSI C、ISO C、Standard C联系与区别
    c、c++ char*和wchar*互相转换
    宽字符与Unicode (c语言 汉语字符串长度)
  • 原文地址:https://www.cnblogs.com/mutougezi/p/6140329.html
Copyright © 2020-2023  润新知