Я пытаюсь выполнить параллельное вычисление с помощью data.table. У меня большой набор данных, и я хотел бы работать с каждой группой предметов самостоятельно и параллельно.Подмножество таблицы данных при параллельном вычислении
Пусть: DataP большой набор данных: ID, x1, x2, x3, группа
Мой код:
# Data preparations
# I split an index (indx) because data split takes a lot of time with my data.
setkey(DataP ,SplitKey_f)
indx<-split(seq(nrow(DataP)),DataP $group)
l<-length(unique(DataP$group))
library(parallel)
library(doParallel)
library(foreach)
cl<-makeCluster(8)
registerDoParallel(cl)
foreach(i=1:l, .combine = rbind) %dopar% {
library(data.table)
Psubset<-DataP [,indx[[i]]]
# some transformations on the data
}
stopCluster(cl)
выше не работает, потому что Еогеасп с параллельных вычислений не может выполнить линия:
Psubset < -DataP [, indx [[i]]]).
Однако% do% вместо% dopar% работает хорошо (но много времени).
Как исправить проблему - быстрая подстановка данных.table в параллельном цикле?
'data.table' на самом деле не поддерживает параллельные вычисления. Механизмы привязки не очень хорошо работают с параллельными вычислениями. Причина вашего распараллеливания заключается в том, что вы вызываете функцию * в * data.table, которая занимает много времени, вам лучше обслуживать, не используя data.table. Однако это не похоже на вас («некоторые преобразования по данным»). Я подозреваю, что ваша фактическая проблема заключается в том, что вы действительно не используете data.table хорошо. (Я также отмечаю, что вы не назначаете цикл foreach, который указывает, что вы не поняли «foreach».) – Roland
Вы должны описать (включая воспроизводимый пример) то, что вы на самом деле пытаетесь достичь, чтобы люди могут предлагать улучшения вашего кода data.table без необходимости распараллеливания. – Roland
Это может быть интересно вам https://github.com/jangorecki/big.data.table –