最近需要做个主题模文档分类,所以牵扯到高维矩阵的分解,初步尝试 7万*9万的矩阵分解,单机是实在无法跑的动,所以选择分布式的处理,来尝试
import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.mllib.linalg.distributed.RowMatrix
import org.apache.spark.mllib.linalg._
val now1 = new Date //打印开始读数据的时间
//开始读取hdfs的数据 eg:我这里的数据是存放在hdfs的path=“/usr/matrix/title_matrix.txt” 下,分割符是‘,’
val M = new RowMatrix(sc.textFile("hdfs:///usr/matrix/title_matrix.txt").map(_.split(','))
.map(_.map(_.toDouble))
.map(_.toArray).map(line => Vectors.dense(line)))
//对矩阵进行 svd分解 并设置输出时的时间
val svd = M.computeSVD(9, true)
val last1 = new Date
//打印输出时的时间
now1
last1
//可以查看奇异值分解的U、D、V
val U = sv