我有一个规范化、整洁的“长”数据结构中的数据,我想上传到H2O,如果可能的话,可以在单台机器上进行分析(或者有一个明确的发现,我需要比目前可用的更多的硬件和软件)。数据量大但并不庞大;可能有 7000 万行 3 列的有效归一化形式,当它被转换为稀疏矩阵(大部分单元格为零)时,可能是 30 万乘 8 万行。
H2O 中的分析工具需要采用后者的宽格式。整体动机的一部分是查看各种硬件设置的限制在分析此类数据时,但目前我正在努力将数据放入 H2O 集群(在 R 可以将其全部保存在 RAM 中的机器上)因此无法对分析的大小限制做出判断。
试用数据如下,其中三列分别为“documentID”、“wordID”和“count”:
1 61 2
1 76 1
1 89 1
1 211 1
1 296 1
1 335 1
1 404 1
没关系——因为这对我来说甚至不是一个真实的数据集,只是一个测试集——这个测试数据来自https://archive.ics.uci.edu/ml/machine-learning-databases/bag- of-words/docword.nytimes.txt.gz(注意,大下载)。
为了分析,我需要它在一个矩阵中,每个 documentID 有一行,每个 wordID 有一个列,单元格是计数(该文档中该单词的数量)。在 R(例如)中,这可以用tidyr::spread
or 来完成(因为在这种特殊情况下,由创建的密集数据框spread
会太大)tidytext::cast_sparse
,只要我很高兴数据留在里面,它就可以很好地处理这种大小的数据R。
现在,最新版本的 H2O(可从 h2o.ai 获得,但尚未在 CRAN 上获得)具有as.h2o
理解稀疏矩阵的 R 函数,这适用于较小但仍然不平凡的数据(例如,在 3500 行 x 的测试用例中) 7000 列它在密集版本需要 22 秒时在 3 秒内导入一个稀疏矩阵),但是当它获得我的 300,000 x 80,000 稀疏矩阵时,它会崩溃并显示以下错误消息:
asMethod(object) 中的错误:文件 ../Core/cholmod_dense.c 中的 Cholmod 错误“问题太大”,第 105 行
据我所知,有两种前进方式:
- 将长、整洁、高效的数据形式上传到 H2O 中,并在 H2O 中进行重塑“传播”操作。
- 用 R(或任何其他语言)进行数据整形,将生成的稀疏矩阵以稀疏格式保存到磁盘,然后从那里上传到 H2O
据我所知,H2O 不具备执行#1 的功能,即相当于 R 中的tidytext::cast_sparse
ortidyr::spread
的功能。它的数据处理能力看起来非常有限。但也许我错过了什么?所以我的第一个(不是很乐观)问题是可以(以及如何)H2O“投射”或“传播”从长格式到宽格式的数据?.
选项 #2 与这个较旧的问题相同,接受的答案是以 SVMlight 格式保存数据。但是,我不清楚如何有效地做到这一点,也不清楚 SVMlight 格式对于不打算用支持向量机建模的数据是否有意义(例如,数据可能仅用于无监督学习问题)。如果我可以将稀疏矩阵保存为Matrix
R 中的包支持的 MatrixMarket 格式,那会方便得多,但据我所知,它不是 H2O 支持的。MatrixMarket 格式看起来与我的原始长数据非常相似,它基本上是一个以空格分隔的文件,看起来像colno rowno cellvalue
(带有两行标题)。