将稀疏矩阵导入h2o实例非常慢

时间:2017-06-26 05:34:14

标签: r performance import sparse-matrix h2o

我在R中得到了一个[210,000 x 500]稀疏矩阵,我正在尝试使用h2o进行聚类。 我想象一个210,000行矩阵对于h2o并不那么大,但是当我尝试将它导入h2o实例时需要很长时间(让它运行超过10分钟并在完成之前停止它) 当我在稀疏矩阵中对前10,000行进行子集并导入它时,只需几秒钟。我已经尝试过递增,这需要很长时间。 (我停止了60,000) 这是正常的还是我做错了什么?

这就是我正在使用的

library(h2o)
localH2O <- h2o.init(nthreads = -1, max_mem_size = "16g")     
spmx.h2o <- as.h2o(sparse_mx)

以下是有关h2o实例生成时的更多信息:

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Starting H2O JVM and connecting: . Connection successful!

    R is connected to the H2O cluster: 
        H2O cluster uptime:         6 seconds 779 milliseconds 
        H2O cluster version:        3.10.4.6 
        H2O cluster version age:    1 month and 30 days  
        H2O cluster name:           H2O_started_from_R_M_vto433 
        H2O cluster total nodes:    1 
        H2O cluster total memory:   14.22 GB 
        H2O cluster total cores:    4 
        H2O cluster allowed cores:  4 
        H2O cluster healthy:        TRUE 
        H2O Connection ip:          localhost 
        H2O Connection port:        54321 
        H2O Connection proxy:       NA 
        H2O Internal Security:      FALSE 
        R Version:                  R version 3.4.0 (2017-04-21) 

我试图避免将矩阵写入文件并再次导入,因为我认为210,000行和500列不应该是h2o处理的问题

1 个答案:

答案 0 :(得分:1)

目前似乎不可能直接通过R将稍大尺寸的稀疏矩阵导入到h2o实例中。相反,通过SVMLight文件导入要快得多。正如这里讨论的那样

How to get sparse matrices into H2O?

编辑:寻找将稀疏矩阵文件转换为SVMLight格式(高效快速算法) 我尝试使用laurai2 / sparsity包来有效地将稀疏矩阵转换为SVMLgith格式文件。但由于某些Cpp编译错误,我无法安装软件包。 根据@Dmitriy Selivanov的建议,我使用了sparsio包,可以轻松地将稀疏矩阵转换为SVMLight格式并快速导入到h2o。

## The following works
library(sparsio)
library(h2o)
write_svmlight(x = spmx, file = "spmx_svmlight.txt", zero_based = FALSE) #h2o accepts one_based by default

localH2O <- h2o.init(nthreads = -1, max_mem_size = "16g")  
spmx.h2o <- h2o.importFile("spmx_svmlight.txt", parse = TRUE) 

我的数据集大小仍然很小,我不确定write_svmlight在更大的数据集上的工作情况。我的数据花了大约40秒,这没关系。