如何在spark中将矩阵转换为RDD [Vector]

时间:2015-01-26 20:57:08

标签: scala apache-spark

如何在Spark中将org.apache.spark.mllib.linalg.Matrix转换为RDD[org.apache.spark.mllib.linalg.Vector]

矩阵是从SVD生成的,我使用SVD的结果进行聚类分析。

1 个答案:

答案 0 :(得分:7)

MLlib的Matrix是一个小的局部矩阵。在本地分析它而不是将其转换为RDD可能更有效。

无论如何,如果您的群集仅支持RDD作为其输入,那么您可以通过以下方式进行转换:

import org.apache.spark.mllib.linalg._
def toRDD(m: Matrix): RDD[Vector] = {
  val columns = m.toArray.grouped(m.numRows)
  val rows = columns.toSeq.transpose // Skip this if you want a column-major RDD.
  val vectors = rows.map(row => new DenseVector(row.toArray))
  sc.parallelize(vectors)
}