【发布时间】:2018-08-25 05:17:06
【问题描述】:
我有一个 50 行(主题)和 572288 列(变量)的数据框
将data.frame 解析为 h2o 对象时,我会丢失变量并最终得到
51 行和 419431 个变量。
如果我减少或增加行数,它不会改变。
library("data.table")
library("h2o")
options("h2o.use.data.table"=T)
h2o.init()
trainset=as.data.frame(matrix(ncol=572288,nrow=50,1))
fwrite(trainset, "train.csv", sep=",")
train=h2o.importFile("train.csv", sep=",")
dim(trainset)
dim(train)
我的输出是:
> h2o.init()
Connection successful!
R is connected to the H2O cluster:
H2O cluster uptime: 1 hours 2 minutes
H2O cluster timezone: Europe/Berlin
H2O data parsing timezone: UTC
H2O cluster version: 3.18.0.11
H2O cluster version age: 3 months
H2O cluster name: H2O_started_from_R_chiocchetti_lub856
H2O cluster total nodes: 1
H2O cluster total memory: 9.84 GB
H2O cluster total cores: 24
H2O cluster allowed cores: 20
H2O cluster healthy: TRUE
H2O Connection ip: localhost
H2O Connection port: 54321
H2O Connection proxy: NA
H2O Internal Security: FALSE
H2O API Extensions: XGBoost, Algos, AutoML, Core V3, Core V4
R Version: R version 3.4.3 (2017-11-30)
> trainset=as.data.frame(matrix(ncol=572288,nrow=50,1))
> fwrite(trainset, "train.csv", sep=",")
>
> train=h2o.importFile("train.csv", sep=",")
|======================================================================|100%
> dim(train)
[1] 51 538177
> dim(trainset)
[1] 50 572288
在我看来,从文件中读回行时,我遇到了某种内存问题。但是,我不知道如何克服这个问题。
最终目标是做一个随机森林。
【问题讨论】:
-
尝试在
h2o.init(max_mem_size = '12G')中分配更多内存,或者大于默认分配的 9.84 GB 的其他值,这在您的系统上是可行的。如果你得到更多的行/列,你就知道这就是问题所在。 -
不幸的是,这根本没有任何效果,我仍然得到相同的结果,我增加到 24GB 我注意到的唯一区别是我是否使用原始数据(填充值 0 1 或 2)或虚拟矩阵。但无论我分配多少内存,都会重现错误
-
尝试使用
data.table::fread()(fread以提高速度,但您也可以使用read.csv)读取数据,然后设置as.h2o() -
确保
fread返回一个 50 x 572,288 表 -
我能够重现您正在使用的 h2o 版本和最新版本的问题,如下所示,这可能是一个错误。但是,如果您可以继续减少所拥有的列数并查看问题在哪里消失,那将会很有趣(我为较小的矩阵测试了相同的代码,然后 h2o 按预期工作)。谢谢!