13

各パーティションで関数を並行して呼び出す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時間以上実行され、完了しませんでした。

4

2 に答える 2