2017-01-18 5 views
1

以下のコードは、私がしたいことについてあなたにいくつかのアイデアを与えるでしょう。実際には、帰属遺伝学ファイルを扱っています。全体で約1000万のSNP(変数)が数千人に帰属していました。私は個々の変数ごとに回帰を実行したい。個々のモデルは計算上は些細な作業ですが、問題は私が巨大なファイルを扱い、これらのモデルを1億回実行していることです。Microsoft Azure HDInsight上のRサーバー - 非常に幅広いデータを扱います。 - rxExec?

マイクロソフトによると、HDInsight Rサーバーは長いデータ用に最適化されています。 1000個の変数と1億の観測値があれば、はるかに簡単になるでしょう。

私は巨大なファイルをいくつかに分割したいと思います。たとえば、100万SNPの1データセットを100,000 SNPの10データセットに分割します。

ここに実行したいコードがあります。最後の行は機能しません。これら10個の小さなデータセットをそれぞれ別のノードに送信し、共通の機能を実行する方法を知る必要があります。一般的には、mclapply()関数を再現したいが、複数のコアで実行する代わりに、複数のワーカーノードで実行する。

通常、サーバーが動作する方法は、自動的にいくつかのセクションに行を切り刻む、およびタスクをそのように分散させることである、それは数千の観測

col <- 10000 
row <- 500 

df <- data.frame(matrix(rnorm(row*col),nrow=row)) 
caco <- sample(0:1, row, replace=T) 



# The way I would do it locally for a normal dataset 


fun <- function(x){ 
    var <- df[[x]] 
    model <- summary(glm(caco ~ var, family="binomial")) 
    p <- c(x,coef(model)["var","Pr(>|z|)"]) 
    return(p) 
} 

stuff <- names(df) 
results <- lapply(stuff,fun) 
# or 
results <- mclapply(stuff,fun) 



### what I want to do 

# Split into several data frames 
# possibly to other data manipulation, whatever is necessary 

df1 <- df[,1:2000] 
df2 <- df[,2001:4000] 
df3 <- df[,4001:6000] 
df4 <- df[,6001:8000] 
df5 <- df[,8001:10000] 

# I want to send each worker node one of these datasets, so each runs 2000 models 

# this code does not work - 
# but I think this is the general direction I want to go, using the 
# rxExec function 

out <- rxExec(fun, rxElemArg(stuff), execObjects=c("df1","df2","df3","df4") 

答えて

0

のためのリソースの無駄であるかどうかを確認してくださいRxExecのdocはここで助けることができます。 https://msdn.microsoft.com/en-us/microsoft-r/scaler-distributed-computing#parallel-computing-with-rxexec

特にこのセクションでは、同様のケースを示しています。 https://msdn.microsoft.com/en-us/microsoft-r/scaler-distributed-computing#plotting-the-mandelbrot-set

ユーザーは、より良いランタイムパフォーマンスを得るために、入力ファイルをdataFrameオブジェクトを介して共有するのではなく、rxExecで直接操作したい場合があります。

ご不明な点がありましたら、(xiaoyzhu at microsoft dot com)お知らせください。

関連する問題