使用Rserve方式搭建R语言环境服务供Java进行调用
1、服务器R语言搭建
环境
名称 | 版本 |
---|---|
CentOS | 7.9 |
R语言 | 3.6.0 |
# 安装EPEL
yum install epel-release
# 安装R
yum install R
# 查看R的版本
R --version
# 安装,1.输入R进行R环境
R
# 安装Rserve,并指定源
install.packages("Rserve", repos = "https://mirrors.ustc.edu.cn/CRAN/")
# 以服务方式启动Rserve,供Java调用,默认端口号6311,日志输出文件R.out,后台启动
R CMD Rserve --RS-enable-remote --no-save> R.out 2>&1 &
## R语言环境搭建成功
2、Java环境搭建
引入maven依赖
<dependency>
<groupId>org.rosuda.REngine</groupId>
<artifactId>Rserve</artifactId>
<version>1.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.rosuda.REngine/REngine -->
<dependency>
<groupId>org.rosuda.REngine</groupId>
<artifactId>REngine</artifactId>
<version>2.1.0</version>
</dependency>
编写测试demo
public class RDemo {
public static void main(String[] args) {
try {
// 建立连接,返回连接对象
RConnection rc = new RConnection("10.10.102.73",6311);
// 服务器中R语言脚本路径
String fileName = "/root/R/hello-world.R";
// 指定要执行的R语言脚本,需要先指定脚本
rc.assign("fileName", fileName);
// 向脚本中进行参数传递,只需要和脚本中的参数名称保持一致即可
rc.eval("user <- 'root'");
rc.eval("password <- '123456'");
rc.eval("dbname <- 'test'");
rc.eval("host <- '127.0.0.1'");
// 执行
rc.eval("source(fileName)");
// 调用R语言脚本中的函数,接收返回值
rc.eval("getId()").asInteger();
rc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
R语言脚本示例
##引入mysql依赖
library(RMySQL)
# 获取数据库连接
mysqlconnection = dbConnect(MySQL(), user = user, password = password, dbname = dbname, host = host)
# 执行sql
result <- dbSendQuery(mysqlconnection, 'select * from test')
#使用fetch获取查询记录
libdata.fam <- fetch(result)
print(libdata.fam)
## 关闭数据库连接
dbDisconnect(mysqlconnection)
# R语言定义函数
getId <- function(){
## 返回值
return <- 1
}