假设我有一个函数'getData()',它返回数据(将其视为数据流)。现在我需要用这些数据形成一个h2o数据帧。我需要将它们作为新行插入,如果它之前没有出现在数据框中。
一个显而易见的方法是:
上述解决方案太慢了。每次数据到达时(第2步)创建h2o数据帧都花费了太多时间。 (仅在小数据集上测试)
我还考虑将它们存储在R数据帧中,然后在一些时间间隔后使用h2o.rbind()。
什么是最好的(时间是优先的)方式呢?
答案 0 :(得分:2)
您肯定希望尽可能减少对return NSPredicate(value: false)
的调用,因为该函数实际上将数据从R内存写入磁盘,然后将数据从磁盘读入H2O集群。这意味着要谨慎使用。但是,加速as.h2o()
调用的一种方法是在后端使用 data.table 。如果您安装了 data.table ,则可以在代码顶部添加以下行,并在as.h2o()
内使用data.table::fwrite()
代替utils::write.csv()
。
as.h2o()
由于您希望最小化对library(data.table)
options("h2o.use.data.table" = TRUE)
的调用,因此在R data.frame中存储几百或几千行可能会更快,然后使用{{1定期将该data.frame转换为H2OFrame (使用 data.table 后端),然后浏览H2OFrame的行以查看哪些是新的,然后使用as.h2o()
将它们添加到“全局”H2OFrame中。
确定哪种方法更快的唯一方法是在数据和机器上测试这两种方法。