我使用RJDBC包和函数dbGetQuery来获取SQL查询的输出。代码工作与SQL语句没有那么多行,但哪些语句,哪些行> 1.000.000我得到一个错误。是否有一个参数来处理内存?
dbGetQuery(conn,"SQL..")
然后我得到以下错误信息:
.jcall(rp, "I", "fetch", stride, block)出错:
java.lang.OutOfMemoryError: GC overhead limit exceeded
谢谢!R007
正如本文所提到的,在加载库之前将java parameters参数放在代码的顶部应该会使堆大小从默认的512 MB增加。如果已经加载了包,则需要重新启动R并重新运行代码以应用更改。
https://www.ibm.com/support/pages/executing-code-r-connecting-impala-jdbc-rjdbc-results-error-jcallrp-i-fetch-stride-javalangoutofmemoryerror-java-heap-space-rjdbcdbgetquery-gc-overhead-limit-exceeded# Do this first
options(java.parameters = "-Xmx4g")
# Then load your libraries
library(XLConnect)
library(RJDBC)
接下来,您可以使用XLConnect包在需要时随时释放Java内存。
# Free up java memory
XLConnect::xlcFreeMemory()
如果你像我一样运行一个巨大的循环,你可能想在重新进入循环并再次运行之前将这个插入到循环中以释放内存。
当然是在运行代码之前安装包:
# Install XLConnect
install.packages("XLConnect")
这两件事放在一起可能足以解决你的问题。
关于这个主题的进一步阅读可以在这里找到:内存不足(Java)"当使用R和XLConnect包