使用R和XLConnect包时出现“内存不足错误(Java)”
我尝试使用XLConnect包将大约30MB的Excel电子表格加载到R中。使用R和XLConnect包时出现“内存不足错误(Java)”
这是我写的:
wb <- loadWorkbook("largespreadsheet.xlsx")
约15秒后,我得到了以下错误:
Error: OutOfMemoryError (Java): GC overhead limit exceeded.
这是对XLConnect包的限制或者是有办法调整我的记忆设置,以允许更大的文件?
我欣赏任何解决方案/提示/建议。
遵守其website建议:
options(java.parameters = "-Xmx1024m")
library(XLConnect)
即使设置了这些选项,我也会遇到此错误 - 错误:OutOfMemoryError(Java):Java堆空间。 – AME
由于Ubuntu更新了Java或rJava包已更新,因此我现在多次出现内存不足问题。在为更多内存配置时,您的选项()解决方案已为我工作,因为在shell中具有unlim -c unlimited命令。但我一直在追逐这个问题。我已经迁移到了openxlsx,这会降低对Java的依赖,而依赖于C++。我从未回头。 –
@BradHorn我遇到了这个问题,并尝试了不同的解决方案。我确定这是一个java问题,因为我的文件非常小,没有任何基于java的软件包解决了这个问题,直到我看到您的评论并尝试了openxlsx。 openxlsx是最简单的解决方案,用于查看它是否与数据相关的问题或与java相关的问题。我认为你应该将你的评论作为答案,因为人们可能不会注意到评论。 –
如果您仍然有问题的进口XLSX档案你可以使用这个opiton。带“Xmx1024m”的Anwser没有工作,我改为“-Xmx4g”。
options(java.parameters = "-Xmx4g")
library(XLConnect)
This链接很有用。
这是我发现的适用于我的第一个解决方案。显然它需要至少有4个免费的RAM:http://www.bramschoenmakers.nl/en/node/726 – zkurtz
最后没有为我工作 - 我收到一个错误,指出垃圾收集器的开销也是大。我得到Excel导出为CSV,然后使用本机read.csv与sep =“;” –
即使运行这些命令后,我仍然有相同的错误。我在x86_64-apple-darwin13.1.0上运行r 3.1.1。 – kilojoules
在openxlsx
package中使用read.xlsx()
。它不依赖于rJava
,因此只具有R本身的内存限制。我还没有深入探讨编写和格式化XLSX,但它有一些看起来很有前途的插图。为阅读大型电子表格,它运作良好。
帽子提示@布拉德霍恩。我刚刚将他的评论作为答案,因为我也发现这是最好的解决方案!
这似乎是这种情况,当你不重新使用R-Studio而反复使用相同的R-session。重新启动R-Studio可以帮助为程序分配新的内存堆。它立即为我工作。
万一有人看的不是一个巨大的,但许多文件时遇到这个错误,我设法通过释放Java虚拟机内存xlcFreeMemory()
,从而解决了这个错误:
files <- list.files(path, pattern = "*.xlsx")
for (i in seq_along(files)) {
wb <- loadWorkbook(...)
...
rm(wb)
xlcFreeMemory() # <= free Java Virtual Machine memory !
}
这对我有用!我曾尝试设置java.parameters,但它不起作用。 – syd
很棒的发现。我的问题是写和重写相同的文件。 (400K)xlsx文件全部完成。 – Dan
另外,您可以使用以下命令查看可用内存:xlcMemoryReport() – aliawadh980
每当你使用的是依赖rJava的库(比如我们的RWeka),你肯定会在某一天达到默认的堆空间(512 MB)。现在,当您使用Java时,我们都知道要使用的JVM参数(如果您需要2 GB的RAM,则使用-Xmx2048m)。这只是一个如何在R环境中指定它的问题。
options(java.parameters = "-Xmx2048m")
library(rJava)
您是否试过其他软件包?他们发生了什么事?其他人,我的意思是'xlsx'和'RExcel'。看看[这个小插图](http://cran.r-project.org/web/packages/xlsx/vignettes/xlsx.pdf)获取其他资源。 – Iterator
另外,也许你可以验证问题最有可能是由于电子表格?例如,创建一个小电子表格并测试它的工作原理。如果可行,那么我会从电子表格中增加矩形,复制并粘贴,并查看是否可以找到突破点。电子表格中可能有些奇怪的东西。 – Iterator
好处是,XLConnect软件包似乎适用于较小的电子表格。不过,我有兴趣在不改变电子表格的情况下找到解决方案。 – AME