Для исследовательского проекта мне нужно извлечь информацию из большого количества PDF-документов, которые предоставляются онлайн.
Для получения информации я использую пакет «tabulizer» (с установленными пакетами «rJava» и «tabulizerjars»).С помощью extract_tables () я уже решил эту проблему.Из-за размера некоторых PDF-документов (около 1000 страниц) мне нужно было увеличить оперативную память, которую ява может использовать с помощью опций (java.parameters = "-Xmx8000m").Однако, поскольку мне нужно многократно повторять этот процесс и из-за времени, которое требуется для чтения pdf-файлов, я попытался распараллелить цикл, используя цикл foreach и серверную часть doParallel.
К сожалению, я не выгляжучтобы иметь возможность увеличить оперативную память, доступную для Java, так как я не верю, что "options (java.parameters =" -Xmx8000m ")" работает для параллельных сессий, так как я получаю ошибку: "задача 1 не выполнена -" java.lang.OutOfMemoryError: Превышен предел загрузки GC ", который я не получаю, используя последовательный цикл.
Я использую машину Windows с оперативной памятью 8 ГБ и 2 физическими и 4 моделируемыми ядрами. Но даже на машинах, предлагающих больше оперативной памяти (16 ГБ)похоже, не сработал.
Я предоставил короткую версию своего кода, включая последовательную часть, которая работает нормально, и параллельную часть, которая вызывается
#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