通过引用传递 H2O 帧

Passing H2O Frames by Reference

我正在处理一个非常大的数据集,我想尽可能多地将数据保存在 H2O 中而不将其带入 R。

我注意到,每当我将 H2O Frame 传递给函数时,我对框架所做的任何修改都不会反映在函数之外。有没有办法通过引用传递帧?

如果不是,通过复制所有 Frame 来修改函数内的原始 frame 的最佳方法是什么?

另一个相关问题:将 Frame 传递给其他函数(只读)是否会在 H2O 端制作额外的副本?我的数据集是 30GB - 100GB。所以要确保传递它们不会导致内存问题。

mod = function(fdx) {
  fdx[,"x"] = -1
}

d = data.frame(x = rnorm(100),y=rnorm(100))
dx = as.h2o(d)
dx[1,]
mod(dx)
dx[1,]  # does not change the original value of x


 > dx[1,]
           x         y
 1 0.3114706 0.9523058

 > dx[1,]
           x         y
 1 0.3114706 0.9523058

谢谢!

H2O 进行了经典的 copy-on-write 优化。因此:

  • 除非您改变数据集,否则不会制作真正的副本。
  • 只有 changed/added 列被真正复制,所有其他 pass-by-reference
  • R 中的帧是 pass-by-value,H2O 模仿的是
  • Python 中的帧是 pass-by-reference,H2O 模仿

简而言之,按照您在 R 中的操作,就可以了。

没有多余的副本。