2017-10-03 4 views
1

(以下ワーキングソリューションを参照してください)multidplyr:私は機能を並列化するmultidplyrを使用したい

をクラスタ化する機能を割り当てる:

calculs.R 
f <- function(x){ 
return(x+1) 
} 

main.R 
library(dplyr) 
library(multidplyr) 
source("calculs.R") 
d <- data.frame(a=1:1000,b=sample(1:2,1000),replace=T) 

result <- d %>% 
    partition(b) %>% 
    do(f(.)) %>% 
    collect() 

を私はその後、取得:

Initialising 3 core cluster. 
Error in checkForRemoteErrors(lapply(cl, recvResult)) : 
    2 nodes produced errors; first error: could not find function "f" 
In addition: Warning message: 
group_indices_.grouped_df ignores extra arguments 

どのようにすることができます各コアにソース関数を割り当てますか?ここで

==================

は完璧なスクリプトです:

は、更新する値を抽出し、データフレームに結果をオンにする必要があります

calcul.R 
f <- function(x){ 
    return(data.frame(x$a+1)) 
    } 

あなたはCLを初期化するように見え、クラスタを設定し、調達機能に

main.R 
library(dplyr) 
library(multidplyr) 
source("calculs.R") 

cl <- create_cluster(3) 
set_default_cluster(cl) 
cluster_copy(cl, f) 

d <- data.frame(a=1:10,b=c(rep(1,5),rep(2,5))) 

    result <- d %>% 
    partition(b) %>% 
    do(f(.)) %>% 
    collect() 

答えて

2

を割り当てる必要がありますuster(この部分は表示しませんが)。グローバル環境から各作業者に変数/関数をエクスポートする必要があります。あなたは

cluster_copy(cl, f)  

を試すことができます

cl <- create_cluster(3) 
set_default_cluster(cl) 

としてクラスタを作ったと仮定すると、このコピーと輸出されますf

エクストラ(と思う...)各ワーカーに

あなたの関数は、引数としてxを受け入れるという別の問題が発生する可能性があります。 D 1

f <- function(x){ 
     return(x+1) 
} 

あなたはfにデータフレームを渡しているので、あなたは意味をなさないdata.frame+1、求めています。あなたは

f <- function(x){ 
     return(x$a+1) 
} 
+0

ような何かにあなたの機能を変更したい場合があります。この詳細な回答CPakのおかげで、次のもののためのより多くの情報: http://blog.aicry.com/multidplyr-dplyr-meets-parallel-processing / –

関連する問題