维护h2o数据帧的有效方法

时间:2017-06-21 18:22:05

标签: r h2o

假设我有一个函数'getData()',它返回数据(将其视为数据流)。现在我需要用这些数据形成一个h2o数据帧。我需要将它们作为新行插入,如果它之前没有出现在数据框中。

一个显而易见的方法是:

  1. 有一个全球h2o数据框
  2. 从到达的数据创建一个h2o数据帧(1行)。 (我使用的是as.h2o())
  3. 检查全局数据框中是否已存在(使用h2o.which()或任何其他功能)
  4. 如果不存在则将其添加到数据框中(使用h2o.rbind())
  5. 上述解决方案太慢了。每次数据到达时(第2步)创建h2o数据帧都花费了太多时间。 (仅在小数据集上测试)

    我还考虑将它们存储在R数据帧中,然后在一些时间间隔后使用h2o.rbind()。

    什么是最好的(时间是优先的)方式呢?

1 个答案:

答案 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中。

确定哪种方法更快的唯一方法是在数据和机器上测试这两种方法。