各パーティションで関数を並行して呼び出すsplit()
ために使用するために、データフレームをパーティション分割しています。parLapply()
データ フレームには 130 万行と 20 列があります。どちらも文字型の 2 つの列で分割/分割しています。~47,000 の一意の ID と ~12,000 の一意のコードがあるように見えますが、ID とコードのすべての組み合わせが一致しているわけではありません。結果のパーティション数は ~250K です。ここにsplit()
行があります:
system.time(pop_part <- split(pop, list(pop$ID, pop$code)))
次に、パーティションは次のようにフィードさparLapply()
れます。
cl <- makeCluster(detectCores())
system.time(par_pop <- parLapply(cl, pop_part, func))
stopCluster(cl)
コードだけでほぼ 1 時間実行しましsplit()
たが、完了しません。ID だけで分割できます。これには約 10 分かかります。さらに、R スタジオとワーカー スレッドは最大 6 GB の RAM を消費しています。
結果のパーティション数がわかっている理由は、30 秒で実行される同等のコードが Pentaho Data Integration (PDI) にあるからです (「分割」コードだけでなく、プログラム全体に対して)。私はRでそのようなパフォーマンスを望んでいませんが、最悪の場合10〜15分で完了する可能性があります.
主な質問: 分割に代わるより良い方法はありますか? も試しましddply()
た.parallel = TRUE
が、1時間以上実行され、完了しませんでした。