我正在尝试通过从spark拼接文件创建h2o框架来导入框架。文件大小为2 2GB,行大小约为12M,稀疏向量大小为12k。它在镶木地板格式中不是那么大,但导入永远需要花费时间。在h2o中,它实际上报告为447mb压缩大小。实际上很小。
我做错了吗?当我实际完成导入(花了39分钟)时,h2o中是否有任何形式可以将帧保存到磁盘以便下次快速加载??
我知道h2o在后台做了一些魔术,花了这么长时间,但我只找到了一个下载csv的选项,对于11k x 1M稀疏数据来说,它既慢又大,我怀疑它的导入速度是否更快。
我觉得好像少了一个部分。任何有关h2o数据导入/导出的信息都将受到欢迎。模型保存/加载工作得很好,但训练/val/测试数据加载似乎是一个不合理的缓慢过程。
我有10个火花工,每个人10克,然后给司机8克。这应该足够了。
发布于 2016-12-14 16:58:13
使用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上,我得到了合理的结果。
发布于 2016-12-15 19:31:07
我建议将数据帧从Spark导出为SVMLight文件格式(参见MLUtils.saveAsLibSVMFile(...)。然后,此格式可由H2O本机摄取。
正如达伦指出的那样,你可以从H2O导出多个部分的数据,这会加快导出速度。但是,H2O目前只支持导出到CSV文件。对于非常稀疏数据的用例,这是次优的。此功能可通过Java API访问:
water.fvec.Frame.export(yourFrame, "/target/directory", yourFrame.key.toString, true, -1 /* automatically determine number of part files */)https://stackoverflow.com/questions/41104540
复制相似问题