2016-09-10 40 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)你会得到一个错误(和你的数据丢失,需要再次导入)。

相关问题