1

我正在尝试通过从 spark parquet 文件创建一个 h2o 框架来导入一个框架。该文件为 2GB,具有大约 12M 行和具有 12k 列的稀疏向量。镶木地板格式并不大,但导入需要很长时间。在 h2o 中,它实际上被报告为 447mb 压缩大小。其实很小。

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

我知道 h2o 在幕后做了一些魔术,这需要很长时间,但我只发现一个下载 csv 选项,对于 11k x 1M 稀疏数据来说,它是缓慢而巨大的,我怀疑导入它是否更快。

感觉好像少了一部分。任何有关 h2o 数据导入/导出的信息表示赞赏。模型保存/加载效果很好,但训练/验证/测试数据加载似乎是一个不合理的缓慢过程。

我得到了 10 个火花机,每个 10 克,给了司机 8 克。这应该足够了。

4

2 回答 2

1

使用h2o.exportFile()(h2o.export_file()在 Python 中),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-14T08:58:13.333 回答
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 */)
于 2016-12-15T11:31:07.120 回答