Параллельно выполнять шаги по сбору данных для каждого компонента списка
У меня есть список с двумя объектами data.table в нем. Чтобы дать представление, одна таблица получила 400 000 строк и 7 переменных, другая - 750 000 строк и 12 переменных. Эти две таблицы не имеют одинаковых столбцов. Я делаю много уроков (разные шаги для каждого) на них. Этапы подсчета включают вычисление суммы, нахождение процентиля для итогового значения, количества наблюдений в каждой группе, уникальной длины и т. Д. (Более 20 шагов в каждой). я использую data.table
пакет для этих шагов. Тем не менее, я вижу, что выполнение всех ~20 шагов для каждого (>40 шагов в общей сложности) занимает немного времени. Мне интересно, как я могу использовать параллельную обработку, чтобы ускорить это. Я предполагаю, что возможно обрабатывать эти шаги параллельно, поскольку они выполняются на разных компонентах списка. Я провел тщательный поиск в Google, чтобы найти идеи для мозгового штурма, однако я не нашел полезных ссылок. Кто-нибудь делал это? Пожалуйста, пролите немного света, поэтому я буду очень благодарен. Спасибо
До сих пор я так много сделал. Result
список, содержащий два объекта data.table У fun1 и fun2 есть набор шагов, которые мне нужно сделать для каждого объекта data.table. По производительности я пока не вижу никакой выгоды (вероятно, из-за накладных расходов? Я не знаю).
munge_data<-function(fun1=prep_data1, fun2=prep_data2, result=result){
library(foreach)
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
fun_munge<-list(quote(prep_data1(result)), quote(prep_data2(result)))
finatest<-foreach (i=1:2, .packages = "data.table") %dopar% {
result<-result
prep_data1<-fun1
prep_data2<-fun2
eval(fun_munge[[i]])
}
stopCluster(cl)
finatest
}