2016-09-10 41 views
0

假設我在4節點H2O簇上有20個幀:a1..a5,b1..b5,c1..c5,d1..d5。我想把它們合併成一個大框架,從中我將建立一個模型。cbind在rbind之前,還是在cbind之前rbind?

是更好地結合起來的列集合,然後再結合行:

h2o.rbind(
    h2o.cbind(a1, b1, c1, d1), 
    h2o.cbind(a2, b2, c2, d2), 
    h2o.cbind(a3, b3, c3, d3), 
    h2o.cbind(a4, b4, c4, d4), 
    h2o.cbind(a5, b5, c5, d5) 
) 

或者,行第一組合,則列:

h2o.cbind(
    h2o.rbind(a1, a2, a3, a4, a5), 
    h2o.rbind(b1, b2, b3, b4, b5), 
    h2o.rbind(c1, c2, c3, c4, c5), 
    h2o.rbind(d1, d2, d3, d4, d5) 
) 

對於參數的緣故,1/2/3/4/5可能每個代表一個月的數據,這就是爲什麼他們分別導入。而a/b/c/d是不同的功能集合,這再次解釋了爲什麼它們是分開導入的。比方說,a1..a5有1728列,b1..b5有113列,c1..c5有360列,而d1..d5是單列(我將建模的答案)。 (雖然我懷疑,因爲H2O是列數據庫,a/b/c/d中列的相對數量無關緊要)

「更好」我的意思是更快,但如果有內存 - 在其中一個或另一個的使用差異,這也是很好的知道:我主要感興趣的是大數據案例,其中的組合框架足夠大,我不能將它放在只是aa的記憶中單節點。

+0

對您的downvote收到評論總是有用的。否則,我應該怎麼知道什麼不清楚,或者需要修復? –

回答

2

我現在相當肯定的答案是:沒有關係。

點1:在問題中的兩個例子是相同的。這是因爲h2o.cbind()和h2o.rbind()都使用懶惰評估。所以無論哪種方式,它立即返回,沒有任何反應,直到你執行一些操作。 (我一直在使用nrow()ncol()迫使新框架的建立 - 這也讓我檢查,我已經得到了我的預期。)

點2:我已經通過H2O通知開發人員他們沒有區別(CPU或內存),因爲數據將被複制。

點3:我還沒有注意到一些合理的大cbind/rbinds,最終幀大小爲17GB(壓縮大小)有任何顯着的速度差異。這並不嚴格,但我從來沒有等待超過30到40秒的nrow()命令來完成副本。

獎金提示:從1點上之後,重要的是你打電話nrow()(或其他)來強制複製到發生,你刪除組成部分之前。如果你做all = rbind(parts),然後h2o.rm(parts),然後nrow(all)你會得到一個錯誤(和你的數據丟失,需要再次導入)。

相關問題