问题描述
在集群上计算会遇到一个问题,进行矩阵的奇异值分解时“M.computeSVD(5000,true,1.0E-9d)”时,A=U*s*V分解的s向量存储,V矩阵存储正常,但是分解的左奇异矩阵U默认为rowmatrix矩阵,这个矩阵存储的(存储代码:U.rows.saveAsTextFile("hdfs://s2:9000/outsvd/big_UUT1"))时候,发现存储结果为为好几部分eg:part-00000、part-00001、part-00002.....等,所以想办法让输出结果为一个部分(存储代码:U.rows.repartition(1).saveAsTextFile("hdfs://s2:9000/outsvd/big_UUT1"))但是发现我求出的矩阵U里面的顺序不对,比如按道理是part-00001+part-00000+part-00002的顺序,但是结果按照part-00000+part-00001+part-00002的顺序来的,尝试着输出多次发现U矩阵的结果是不确定的就是因为几个输出的part部分汇总的问题,所以一直不知道该怎么搞,还是希望懂的人能够给与建议及指导部分测试代码如下:文本数据集:matrix_A1.TXT1,0,0,1,0,0,0,0,01,0,1,0,0,0,0,0,01,1,0,0,0,0,0,0,00,1,1,0,1,0,0,0,00,1,1,2,0,0,0,0,00,1,0,0,1,0,0,0,00,1,0,0,1,0,0,0,00,0,1,1,0,0,0,0,00,1,0,0,0,0,0,0,10,0,0,0,0,1,1,1,00,0,0,0,0,0,1,1,10,0,0,0,0,0,0,1,1scala代码importjava.util.{Date,Locale}importjava.text.DateFormatimportorg.apache.spark.mllib.linalg.{Vector,Vectors}importorg.apache.spark.mllib.linalg.Vectorimportorg.apache.spark.mllib.linalg.distributed.RowMatriximportorg.apache.spark.mllib.linalg._valnow1=newDatevalM=newRowMatrix(sc.textFile("hdfs:///usr/matrix/matrix_A1.txt").map(_.split(',')).map(_.map(_.toDouble)).map(_.toArray).map(line=>Vectors.dense(line)))valsvd=M.computeSVD(4,true,1.0E-9d)vallast1=newDatevalU=svd.UU.rows.foreach(println)U.rows.repartition(1).saveAsTextFile("hdfs://1111.11.11.111:9000/outsvd/UU1")
解决方案
解决方案二:
求懂的大牛指导呀,给出具体代码修改建议,小弟拜谢了
解决方案三:
莫要沉了呀