我正在尝试通过从spark镶木地板文件创建h2o框架来导入框架。 文件是2GB有大约12M行和稀疏向量有12k列。 它不是那么大的镶木地板格式,但进口需要永远。 在h2o中,它实际上报告为447mb压缩大小。实际上很小。
我做错了,当我实际完成导入(花了39分钟)时,是否有任何形式在h2o中将帧保存到磁盘以便下次快速加载?
我知道h2o在场景背后做了一些魔术,这需要很长时间,但我只发现了一个下载csv选项,对于11k x 1M的稀疏数据来说速度很慢而且很大,我怀疑它导入的速度更快。
我觉得有一部分缺失。任何有关h2o数据导入/导出的信息都表示赞赏。 模型保存/加载效果很好,但是训练/ val /测试数据加载似乎是一个不合理的缓慢程序。
我有10个火花工,每个10克,并给了司机8克。这应该是充足的。
答案 0 :(得分:1)
使用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 :(得分:0)
我建议将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 */)