我正在使用Hadoop / Mahout来分解将成为非常大的稀疏矩阵。问题是,我甚至无法用200个非零值和尺寸56000 x 56000来完成它,这是在一秒钟内用Python解决的。我怀疑计算在某些时候会变得密集!
此时我正在使用单节点/核心。这有关系吗?所有操作都是从Java文件运行,而不是从命令行运行。我得到的例外是和老人但是好人:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.apache.mahout.math.DenseMatrix.<init>(DenseMatrix.java:50)
at org.apache.mahout.math.solver.EigenDecomposition.<init>(EigenDecomposition.java:70)
at myhadoop.MyHadoop.main(MyHadoop.java:84)
Java结果:1
当然,由于Exceptions引用了DenseMatrix,我很担心。如果它以某种方式使用重写方法,我可能会更少关心,但如果写入实际零,那就不好了。另外,我的程序运行得很慢。
代码:
SparseRowMatrix A = new SparseRowMatrix();
// Matrix A is then created by adding elements one by one in a
// somewhat ordered fashion.
B SparseRowMatrix = A;
B.transpose();
A.plus(B);
EigenDecomposition eigDec = new EigenDecomposition(A, true);
myEig = eigDec.getRealEigenvalues();
如果实际上没有关于如何使这个真正稀疏的任何想法?