1

我正在从 java 将一个非常大的数据集加载到 R 中。我创建了一个使用 rJava 的 jri 调用 R 的 Java 程序。该程序已被打包成一个可执行的 jar 文件,并正在从终端 (linux) 调用。数据位于 50 列 x 1370 万行的区域中。单独的 R 可以毫无问题地处理这个问题。但是,当我从 Java 程序运行它时,我收到 Java OutofMemory Heap 错误。

问题是当我用它工作的一半行运行它时,R 应该只将每个变量的名称(总共 50 个)发送回 java,而不管有多少行。这是我正在使用的代码:

re.eval("names(data<-read.csv(file="data.csv", head=TRUE, sep=","));

我的理解是 re.eval 函数,计算 R 中的表达式并将结果发送回 R。有没有办法让你评估函数而不将结果返回给 java?

我之前问过一个类似的问题,这里是链接: Evaluating expressions called from Java in R. Out of Memory Error: Java Heap

4

2 回答 2

1

您是否尝试通过使用选项启动可执行文件来调整 JVM 堆大小?

喜欢:

java -Xmx1024m -Xms1024m myJar

显然,您可以调整内存值,但该选项-Xmx设置 JVM 的最大堆大小并-Xms设置初始大小。

如果您正在处理大量实际需要检索的数据,这可能会有所帮助,否则您没有获取任何数据的选项(如 cdeszaq 所建议的)显然最适合您。

于 2011-12-02T15:12:03.297 回答
0

一种允许您在没有任何东西返回 Java 的情况下调用 R 的方法是将 R 作为外部进程调用。由于看起来这大致就是您正在做的事情,也许让操作系统执行对 R 的调用,而不是 Java 内部的库,可以防止溢出。

于 2011-12-02T15:01:25.787 回答