2011-04-25 21 views
13

multicoreパッケージと大きなオブジェクトで問題が発生し続けています。基本的なアイデアは、大きな物体で読むためにBioconductor関数(readBamGappedAlignments)を使用していることです。私はファイル名の文字ベクトルを持っており、私はmclapplyを使ってファイルをループし、それらをリストに読み込んでいます。この関数は次のようになります。大きなオブジェクトのmclapply - 「シリアル化が大きすぎて生のベクトルに格納できない」

objects <- mclapply(files, function(x) { 
    on.exit(message(sprintf("Completed: %s", x))) 
    message(sprintf("Started: '%s'", x)) 
    readBamGappedAlignments(x) 
}, mc.cores=10) 

をしかし、私は次のエラーを得続ける:Error: serialization is too large to store in a raw vector。しかし、このエラーがなければ、私は単独で同じファイルを読むことができるようです。私はこの問題hereの言及を解決なしに見つけました。

並列ソリューションの提案があれば分かります。これは並行して行う必要があります。私は雪のように見えるかもしれませんが、私はこれを行うことができます15プロセッサー、それぞれ8コアと256ギガバイトのメモリを搭載した非常に強力なサーバーを持っています。私はむしろ、私たちのクラスタの1つを使用するのではなく、コアをまたいでこのマシン上で実行します。

+2

ソケットクラスターは、1台のマシンで使用できます(デフォルトは「localhost」)。 –

+10

親が子からデータを取得しようとしたときに、データがタイプrawのベクトルに変換され、ベクトルがRの最長ベクトル2^31 - 1より長いため、エラーが発生します。結果はビッグデータの「削減」です。 –

+0

ありがとう、トン・マーティン!私はそれがこれに関連する可能性があると思ったが、それは別のエラーメッセージで現れると思った。 'R_len_t'の使い方が不足しているため、再び醜い頭が...これを長く設定してやることができればそれは素晴らしいことです。 – Vince

答えて

3

整数の上限はmulticoreパッケージ内通過に依存しsendMasterのような(最大の整数の周り)億2の下で細胞とのデータセット、および低レベルの機能をブロックすることができます制限する私の経験ではR.で非常にすぐに対処すると噂されています生ベクター。私は約400万行のデータと8億個のセルをdata.table形式で表した約100万のプロセスを持っていました。そして、mclapplyが結果を送り返していたときに、この限界に達しました。

分割と征服の戦略はそれほど難しくはありません。私はこれがハックだとわかり、mclapplyに頼ることができるはずです。

大きなリストの代わりに、リストのリストを作成します。各サブリストは壊れたバージョンよりも小さいので、mclapplyに分割して分割します。このfile_mapと呼んでください。結果はリストのリストなので、特別なダブル連結do.call関数を使用することができます。その結果、mclapplyが終了するたびに、シリアル化された生ベクターのサイズは管理可能なサイズになります。小さなピースを超える

だけループ:あなたはSQLiteのような行くよう

collector = vector("list", length(file_map)) # more complex than normal for speed 

for(index in 1:length(file_map)) { 
reduced_set <- mclapply(file_map[[index]], function(x) { 
     on.exit(message(sprintf("Completed: %s", x))) 
     message(sprintf("Started: '%s'", x)) 
     readBamGappedAlignments(x) 
    }, mc.cores=10) 
collector[[index]]= reduced_set 

} 

output = do.call("c",do.call('c', collector)) # double concatenate of the list of lists 

代わりには、データベースに出力を保存します。

関連する問題