Чего я хочу добиться, это разделить мой набор данных на n
чанков, где n - количество доступных процессоров, и отправить каждый чанк на другой узел. Таким образом, узел 1 получит блок 1, узел 2 получит блок 2, ..., а узел n получит блок n.
Раньше я обычно отправлял весь набор данных каждому узлу и подмножество данных только на каждом узле, но так как мой набор данных стал больше, я не могу себе этого позволить, поскольку использование clusterExport
приведет к появлению следующего сообщения об ошибке:
Error in serialize(data, node$con) : error writing to connection
Я пробовал так много разных версий моей функции вместе с clusterApply
или clusterCall
, но ни одна из них не работала так, как будто они имели данные (разделенные как список с элементами n
) поскольку аргумент функции в вызове clusterApply
не сильно отличается от отправки данных узлам, и похоже, что R
все еще отправляет копии для выполнения функции, что приводит к аналогичной ошибке.
Кроме того, я попытался разделить данные на главном устройстве (т. Е. Data_1, ..., data_n были созданы) и попытался прочитать каждую часть на одном узле без отправки всех данных, используя:
data_dist <- function(data){
node_data <<- eval(as.name(data))
}
clusterApply(cluster, str_c("data", 1:ncores, sep = "_"), data_dist)
но все же данные недоступны для узлов. Любая помощь будет принята с благодарностью.