RServe Java客户端-性能

时间:2019-02-06 21:51:55

标签: java r rserve

我目前正在开发使用RServe和用于RServe的REngine客户端为远程R提供用户界面的应用程序。

Maven依赖项:

<!-- https://mvnrepository.com/artifact/org.rosuda.REngine/Rserve -->
<dependency>
    <groupId>org.rosuda.REngine</groupId>
    <artifactId>Rserve</artifactId>
    <version>1.8.1</version>
</dependency>

我需要向用户提供有关服务器上处理的数据的一些概述。 在我的测试数据集上,大约有40列,我想显示的是前100行。

这是我正在执行的代码:

// Connection is my class holding singleton instance of
// RConnection, connected to RServe with specified user
RConnection conn = Connection.getInstance();

// get UP to maxLimit rows of data Frame
String cmd = "&1[1:min(nrow(&1),maxLimit),]";
// final cmd is R command in format <dataframe>[1:min(nrow(<dataFrame>),100),]
cmd = cmd.replaceAll("&1", variable.getVariableName());

// this is taking too long because of result parsing to REXP object
REXP result = conn.eval(cmd); 

RList list = result.asList();

// my own processing ....

问题是,与在R上执行命令相比,解析此命令的结果要花更长的时间,并且随后通过网络一起传输(在Java端进行解析需要大约60%的处理时间)。

我确定REXPFactory类的parseREXP()方法是造成此延迟的原因(正在解析服务器的结果)。

在100行中,整个过程大约需要1分钟,对于我来说,考虑到在客户端处理100行大约需要30秒,这似乎太慢了。

我的问题是:

1。)有什么方法可以优化此过程? (除了在后台预加载数据外,因为在大多数情况下,应根据用户请求更新预览数据)

2。)这是REngine的已知问题吗? (因为在网上和文档上我都没有找到讨论类似问题的话题)

0 个答案:

没有答案