对于一个研究项目,我需要从在线提供的大量 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