1

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

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

不幸的是,我似乎无法增加可用于 Java 的 ram,因为我不相信“选项(java.parameters = “-Xmx8000m”)”适用于并行会话,因为我收到错误:“任务 1 失败 - ” java.lang.OutOfMemoryError:超出 GC 开销限制”,我使用顺序循环没有收到。

我正在使用一台具有 8GB 内存和 2 个物理内核和 4 个模拟内核的 Windows 机器。但即使使用提供更多内存(16GB)的机器似乎也没有奏效。

我提供了我的代码的简短版本,包括运行良好的顺序部分和 causi 的并行部分

#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))  

}

我一直在寻找解决方案大约一两个星期。您的帮助将不胜感激。

期待您的回答或建议。

拉库101

4

0 回答 0