我正在使用split()
對數據幀進行分區,以便使用parLapply()
並行調用每個分區上的函數。數據幀有130萬行和20列。我分裂/分成兩列,兩種字符類型。看起來像〜47K獨特的ID和〜12K獨特的代碼,但不是每個ID和代碼的配對匹配。由此產生的分區數量是〜250K。這裏是split()
行:然後快速替代分割R
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)
我讓split()
代碼單獨運行近一個小時,並沒有完成。我可以通過身份證分開,這需要大約10分鐘。此外,R studio和工作線程正在消耗大約6GB的RAM。
我知道分區結果數量的原因是我在30秒內(對於整個程序,而不僅僅是「拆分」代碼)運行Pentaho數據集成(PDI)中的等效代碼。我不希望與R這種類型的表現,但可能在10 - 15分鐘內完成的最壞情況。
主要問題:是否有更好的選擇拆分?我也試過ddply()
與.parallel = TRUE
,但它也跑了一個多小時,從未完成。
謝謝,我會試試看。哈,我實際上最初編寫了R代碼,然後將其移植到PDI(我對R比PDI更有經驗)。 – argoneus
我運行了你發佈的'split()'代碼,並且等了將近一個小時,但它從未完成。 – argoneus
在拆分周圍添加了一些其他建議,這應該在一秒或更短的時間內完成。也許因素也導致func也變慢了? –