如何使用foreach

时间:2019-06-19 13:48:33

标签: r

对于研究项目,我需要从许多在线提供的pdf文档中提取信息。

为了获取信息,我使用“ tabulizer”软件包(安装了软件包“ rJava”和“ tabulizerjars”)。使用“ extract_tables()”,我已经解决了这个问题。由于某些pdf文档的大小(大约1000页),我需要增加ram java,允许通过options(java.parameters =“ -Xmx8000m”)使用。但是,由于我需要重复多次此过程,并且由于要花费大量时间读取pdf文件,因此我尝试使用foreach循环和doParallel后端并行化循环。

不幸的是,由于我不相信“ options(java.parameters =“ -Xmx8000m”)“对并行会话有效,因此我似乎无法提高Java可用的内存,因为出现错误:”任务1失败-“ java.lang.OutOfMemoryError:超出了GC开销限制”,我没有使用顺序循环收到此消息。

我正在使用具有8GB内存,2个物理和4个模拟内核的Windows机器。但是,即使使用提供更多ram(16GB)内存的机器似乎也无法解决问题。

我提供了我的代码的简短版本,包括可以正常工作的顺序部分和因果关系的并行部分

#General 

options(java.parameters = "-Xmx8000m")
library("rio")   
#The 64bit Java Version needs to be installed                   
library("rJava")                                                                                                                 
library("tabulizerjars")
library(tabulizer)
library("foreach")
library("doParallel")

#Location of pdf files
Urls <- cbind("https://www.ffiec.gov/CraAdWeb/pdf/2017/D1-100000000011.PDF","https://www.ffiec.gov/CraAdWeb/pdf/2017/D1-100000000081.PDF","https://www.ffiec.gov/CraAdWeb/pdf/2017/D1-100000000241.PDF")


#Sequential 

for (i in 1:3){

  location <- Urls[i]  

  #Extracted data are    assigned to variables.
  assign(paste0("Bank",i), extract_tables(location)) 
}



#Parallel (Mentioned Problem arises here)

cl <- makeCluster(3) 
registerDoParallel(cl)

Daten <- foreach(i=1:3, .packages= c("rJava", "tabulizerjars", 'tabulizer')) %dopar% {

  location <- Urls[i]  

  #Extracted data are    assigned to variables.
  assign(paste0("Bank",i), extract_tables(location))  

}

我一直在寻找解决方案大约一两个星期。非常感谢您的帮助。

期待您的回答或建议。

Lakue101

0 个答案:

没有答案