通过引用传递 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 中的操作,就可以了。
没有多余的副本。
我正在处理一个非常大的数据集,我想尽可能多地将数据保存在 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 中的操作,就可以了。
没有多余的副本。