Как увеличить использование оперативной памяти в R для параллельного программирования с использованием foreach - PullRequest
1 голос
/ 19 июня 2019

Для исследовательского проекта мне нужно извлечь информацию из большого количества 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...