首页 文章

h2o苏打水将帧保存到磁盘

提问于
浏览
1

我试图通过从火花镶木地板文件创建一个h2o框架导入一个框架 . 文件是2GB有大约12M行和稀疏向量有12k列 . 它不是那么大的镶木地板格式,但进口需要永远 . 在h2o中,它实际上报告为447mb压缩大小 . 实际上很小 .

我做错了,当我真正完成导入(花了39分钟)时,是否有任何形式在h2o中将帧保存到磁盘以便下次快速加载?

我知道h2o在场景背后做了一些魔术需要很长时间,但我只发现了一个下载csv选项,对于一个11k x 1M的稀疏数据来说速度很慢而且很大,我怀疑它导入的速度更快 .

我觉得有一部分缺失 . 任何有关h2o数据导入/导出的信息都表示赞赏 . 模型保存/加载工作很好但是训练/ val /测试数据加载似乎是一个不合理的缓慢程序 .

我有10个火花工,每个10克,并给了司机8克 . 这应该是充足的 .

2 回答

  • 0

    使用 h2o.exportFile() (在Python中为 h2o.export_file() ), parts 参数设置为-1 . -1有效意味着集群中的每台机器只会导出自己的数据 . 在你的情况下,你最终会得到10个文件,它应该比其他文件快10倍 .

    要重新读取它们,请使用 h2o.importFile() 并在加载时指定所有10个部分:

    frame <- h2o.importFile(c(
      "s3n://mybucket/my.dat.1",
      "s3n://mybucket/my.dat.2",
      ...
      ) )
    

    通过提供一个文件数组,它们将被并行加载和解析 .

    对于本地LAN群集,建议使用HDFS . 在EC2上运行集群时,通过将文件保留在S3上,我得到了合理的结果 .

  • 1

    我建议将Spark中的数据帧导出为SVMLight文件格式(参见MLUtils.saveAsLibSVMFile(...) . 这种格式可以由H2O本机摄取 .

    正如Darren指出的那样,你可以从多个部分输出H2O数据,从而加快出口速度 . 但是,H2O目前仅支持导出到CSV文件 . 对于非常稀疏数据的用例,这是次优的 . 可以通过Java API访问此功能:

    water.fvec.Frame.export(yourFrame, "/target/directory", yourFrame.key.toString, true, -1 /* automatically determine number of part files */)
    

相关问题