gpt4 book ai didi

r - 在R并行中将clusterExport导出到单线程

转载 作者:行者123 更新时间:2023-12-03 12:55:26 24 4
gpt4 key购买 nike

我想将一个较大的data.frame拆分为多个块,然后分别将其分别传递给集群的不同成员。

就像是:

library(parallel)
cl <- makeCluster(detectCores())
for (i in 1:detectCores()) {
clusterExport(cl, mydata[indices[[i]]], <extra option to specify a thread/process>)
}

这可能吗?

最佳答案

这是一个在clusterCall循环内使用for将数据帧的不同块发送给每个工作人员的示例:

library(parallel)
cl <- makeCluster(detectCores())
df <- data.frame(a=1:10, b=1:10)
ix <- splitIndices(nrow(df), length(cl))
for (i in seq_along(cl)) {
clusterCall(cl[i], function(d) {
assign('mydata', d, pos=.GlobalEnv)
NULL # don't return any data to the master
}, df[ix[[i]],,drop=FALSE])
}

请注意,对 clusterCall的调用是子集 cl的设置,以便每次通过 for循环在单个工作线程上执行该功能。

您可以使用以下示例来验证工作程序是否已正确初始化:
r <- do.call('rbind', clusterEvalQ(cl, mydata))
identical(df, r)

有更简单的方法可以执行此操作,但是此示例将主服务器使用的内存和发送给每个工作线程的数据量最小化。当数据帧很大时,这一点很重要。

关于r - 在R并行中将clusterExport导出到单线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31068289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com