我正在使用 RJDBC 包和 dbGetQuery 函数来获取 SQL 查询的输出。该代码适用于行数不多的 SQL 语句,但哪些语句的行 > 1.000.000 出现错误。是否有处理内存的参数?
dbGetQuery(conn,"SQL..")
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误消息:
.jcall(rp, "I", "fetch", stride, block) 中的错误:
java.lang.OutOfMemoryError:超出 GC 开销限制
谢谢!R007
正如本文提到的,在加载库之前将 java 参数参数放在代码的顶部应该会增加默认的 512 MB 堆大小。如果您已经加载了包,则需要重新启动 R 并重新运行代码才能应用更改。
# Do this first
options(java.parameters = "-Xmx4g")
# Then load your libraries
library(XLConnect)
library(RJDBC)
Run Code Online (Sandbox Code Playgroud)
接下来,您可以根据需要使用 XLConnect 包来释放 Java 内存。
# Free up java memory
XLConnect::xlcFreeMemory()
Run Code Online (Sandbox Code Playgroud)
如果您像我一样运行一个巨大的循环,您可能需要将其插入循环中以释放内存,然后再重新进入并再次运行。
当然,在运行代码之前安装软件包:
# Install XLConnect
install.packages("XLConnect")
Run Code Online (Sandbox Code Playgroud)
这两件事加在一起可能足以解决您的问题。
有关此主题的进一步阅读可在此处找到: “Out of Memory Error (Java)”when using R and XLConnect package