R错误:java.lang.OutOfMemoryError:Java堆空间

use*_*354 29 java r

我正在尝试将R连接到Teradata以将数据直接导入R进行分析.但是,我收到的错误是:

Error in .jcall(rp, "I", "fetch", stride, block) :
  java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

我尝试通过执行以下操作来设置我的R选项以增加JVM的最大堆大小:

options(java.parameters = "-Xmx8g")
Run Code Online (Sandbox Code Playgroud)

我还尝试使用rJava函数初始化java参数.jinit:.jinit(parameters="-Xmx8g").但仍然失败了.

计算出的数据大小应约为3G(实际上小于3G).

有人可以帮我吗?任何建议表示赞赏.

tux*_*ong 27

加载rJava或任何其他软件包之前,您需要确保分配额外的内存.首先擦除环境(通过rm(list = ls())),如果必须,重新启动R/Rstudio,并修改脚本开头的选项.

options(java.parameters = "-Xmx8000m")

例如参见https://support.snowflake.net/s/article/solution-using-r-the-following-error-is-returned-javalangoutofmemoryerror-gc-overhead-limit-exceeded


drm*_*iod 10

我不知何故以不可重现的方式遇到了这个问题,部分解决了它,-Xmx8g但随机遇到了问题。

我现在使用不同的垃圾收集器找到了一个选项

options(java.parameters = c("-XX:+UseConcMarkSweepGC", "-Xmx8192m"))
library(xlsx)
Run Code Online (Sandbox Code Playgroud)

在脚本的开头和加载任何其他包之前,因为其他包可以自己加载一些 java 东西,并且必须在加载任何 Java 之前设置选项。

到此为止,问题没有再出现。

只是有时在长时间的会话中它仍然会发生。但在这种情况下,会话重启通常可以解决问题。