当前位置: 首页 > 知识库问答 >
问题:

如何快速将数据输入h2o

申屠泳
2023-03-14

我的问题不是:

    < li >维护h2o数据帧的有效方法 < li>H2O运行速度比data.table R慢 < li >在h2o中加载大于内存大小的数据

硬件/空间:

  • 32 个至强线程,带 ~256 GB 内存
  • 要上传约 65 GB 的数据。(约56亿个细胞)

问题:
将数据上传到h2o需要几个小时。这不是任何特殊处理,只是“as.h2o(...)”。

使用“fread”将文本放入空间只需要不到一分钟的时间,然后我进行一些行/列转换(diff、lags)并尝试导入。

在尝试任何类型的“as.h2o”之前,总的R内存为~56GB,所以分配的128不应该太疯狂,是吗?

问题:
我该怎么做才能使它在一个小时内装入h2o?这应该需要一分钟到几分钟,不再需要了。

我所尝试的:

  • 在'h2o.init'中高达128 GB的颠簸内存
  • 使用slm、data.table和选项(…
  • 转换为"as. h2o"前的"as.data.frame"
  • 写入csv文件(rwrite.csv会阻塞并花费很长时间。不过它会写入很多GB,所以我明白)。
  • 写入sqlite3,表格列太多,很奇怪。
  • 检查驱动器缓存/交换以确保那里有足够的GB。也许java正在使用缓存。(仍在工作)

更新:< br >所以看起来我唯一的选择是创建一个巨大的文本文件,然后使用“h2o.importFile(...)“为了它。我最多写15GB。

Update2:
这是一个可怕的csv文件,大小约为22GB(约2.4M行,约2300列)。值得一提的是,从中午12:53到下午2:44编写csv文件。在编写之后,导入速度大大加快。

共有1个答案

钱华晖
2023-03-14

as.h2o() 视为一个方便的函数,它执行以下步骤:

  1. 将R数据转换为数据。框架,如果还没有
  2. 保存数据。帧到本地磁盘上的临时文件(如果可用,它将使用data.table::fwrite()(*),否则写入。csv()
  3. 呼叫<代码>h2o。该临时文件上的uploadFile()
  4. 删除临时文件

正如你的更新所说,将巨大的数据文件写入磁盘需要一段时间。但是这里的另一个难点是使用< code>h2o.uploadFile()而不是更快的< code>h2o.importFile()。决定使用哪个是可见性:

    < li >使用< code>h2o.uploadFile()时,您的客户端必须能够看到该文件。 < li >通过< code>h2o.importFile(),您的群集必须能够看到该文件。

当客户机与某个集群节点在同一台机器上运行时,客户机和集群都可以看到您的数据文件,因此,请始终选择h2o.importFile()。(它执行多线程导入。)

另外还有一些提示:只将您实际需要的数据带入R会话。记住R和H2O都是面向列的,所以cbind可以很快。如果您只需要在R中处理2300列中的100列,将它们放在一个csv文件中,并将其他2200列保存在另一个csv文件中。然后h2o.cbind()将它们分别加载到H2O中。

*:使用h2o:::as.h2o.data.frame(不带括号)查看实际代码。data.table编写,您需要首先执行选项(h2o.use.data.table=TRUE);您也可以选择使用h2o.fwrite选项打开/关闭它。

 类似资料:
  • 共享收货地址接口 wx.openAddress({ success: function (res) { var userName = res.userName; // 收货人姓名 var postalCode = res.postalCode; // 邮编 var provinceName = res.provinceName; // 国标收货地址第一级地址(省)

  • 问题内容: 调用以下代码时,试图将“ self”快速传递给C函数: 在这里将“自我”转换为UnsafeMutablePointer类型的理想方法是什么? 问题答案: 一个对象的指针(即,实例 引用类型 )可以被转换为一个(的夫特映射,在夫特3)和背部。在Objective-C中,您将编写 (有关这些转换的确切含义,请参见Clang ARC文档中的3.2.4桥接转换。) Swift 为此具有一种类型

  • 输入输出是人机交互的一种方式。最常见的输入输出是标准输入输出和文件输入输出(当然还有数据库输入输出,本节不讨论这部分)。 标准输入 标准输入也叫作控制台输入,是常见输入的一种。 例子1: use std::io; fn read_input() -> io::Result<()> { let mut input = String::new(); try!(io::stdin().r

  • 问题内容: 我正在做一个示例项目,其中我想将数据从iPhone发送到WatchKit。我不知道该怎么做。任何帮助将不胜感激。提前致谢 问题答案: 在AppDelegate中添加以下方法: 将此添加到Apple Watch Extension中的任何位置: 第一个函数将使用触发并回复参数中的字典。 开发人员论坛: https : //devforums.apple.com/message/10826

  • 问题内容: 我找不到任何资源,我一直在尝试各种方法,但是没有任何效果。 根据Apple的文档,您对NSDecimalNumber进行如下舍入: 它接受一个NSDecimalNumberBehavior,我不确定如何操作,因为(1)无法将其初始化为变量并更改了属性,并且(2)根据文档所述的roundingMode()方法没有任何参数,但Xcode会为“ self”填充参数空间。 我对此完全迷失了。回

  • DB2提供了关连式资料库的查询语言 SQL (Structured Query Language),是一种非常口语化、既易学又易懂的语法。 此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操作,包含了资料的定义(DDL)以及资料的处理(DML)。 SQL原来拼成SEQUEL,这语言的原型以"系统 R"的名字在 IBM 圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相