Параллельно выполнять шаги по сбору данных для каждого компонента списка

У меня есть список с двумя объектами 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
}

0 ответов

Другие вопросы по тегам