2017-03-12 20 views
0

私は100以上のファイルがあるディレクトリでcsvファイルを読んでいます。次に、いくつかのことをやっています。私は8コアのCPUを持っていますので、パラレルモードで高速に処理したいのです。Rで並列処理する方法は?

私はいくつかのコードを書いたが、それは私のために動作しません - (Linuxを使用して)

library(data.table) 
library(parallel) 

# Calculate the number of cores 
no_cores <- detectCores() - 1 
# Initiate cluster 
cl <- makeCluster(no_cores) 

processFile <- function(f) { 

    # reading file by data.table 
    df <- fread(f,colClasses = c(NA,NA, NA,"NULL", "NULL", "NULL")) 

    A <- parLapply(cl,sapply(windows, function(w) {return(numOverlaps(w,df))})) 

    stopCluster(cl) 
} 

files <- dir("/home/shared/", recursive=TRUE, full.names=TRUE, pattern=".*\\.txt$") 

# Apply the function to all files. 

result <- sapply(files, processFile) 

あなたは私がprocessFile(A)内の関数を実行したいが、それは動作しません。見ての通り!

この機能を並列処理モードでどのように実行することができますか?

答えて

2

あなたはその頭の上にコンセプトを持っています。ファイルのリストをparLapplyに渡してから作業する必要があります。無名関数は、個々のファイルを処理して望みの結果を返すプロセス全体を実行する必要があります。

私は最初に通常のlapplyまたはsapplyを使ってこの作業を行い、次に必要なすべての必要なライブラリとオブジェクトをエクスポートするだけで、並列バックエンドを起動することをお勧めします。

parLapply(cl, X = files, FUN = function(x, ...) { 
    ... code for processing the file 
}) 
+0

"data.table"パッケージを使用していて、 "fread"(parLapply関数内)でテーブルを読み込んでいるので、私にはうまくいかず、ファイルを読み込めないというエラーが発生しました。 –

+0

@BigData(再現可能な)コードなしで言うのは難しいです。あなたがコードの塊(データの生成、ディスクへの書き込み、freadの読み込み...)を提供すれば、私はおそらくそれを並行して動作させることができます。 –

+0

私はfread関数で読んでいるコードを更新しました。私はあなたの関数の中にこの行を含めました。私が持っているエラーは:checkForRemoteErrors(val)のエラー: 7ノードでエラーが発生しました。最初のエラー:関数 "fread"を見つけることができませんでした - –

関連する問題