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

Scala 如何在spark中将矩阵转换为RDD[Vector],scala,apache-spark,Scala,Apache Spark,如何在spark中从org.apache.spark.mllib.linalg.Matrix转换为RDD[org.apache.spark.mllib.linalg.Vector] 矩阵是从SVD生成的,我使用SVD的结果进行聚类分析。MLlib的矩阵是一个小的局部矩阵。本地分析可能比将其转换为RDD更有效 无论如何,如果您的集群只支持RDD作为其输入,那么以下是如何进行转换: import org.apache.spark.mllib.linalg._ def toRDD(m: Matrix)

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


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

MLlib的
矩阵
是一个小的局部矩阵。本地分析可能比将其转换为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)
}

你能说得更具体些吗?(是不可变的Scala Vector()还是Java的
Java.util.Vector
,还是Python的东西?矩阵是如何表示的,它的类型是什么?@GáborBakos:从Jiang的编辑看来,我们谈论的是MLlib的
矩阵
向量
。矩阵是从svd方法生成的。我想使用kmeans集群方法来查找矩阵的集群,但是kmeans方法只接受RDD。啊,我明白了!我已将答案更新为不那么刺耳:)。希望代码能正常工作!非常感谢你!我来自机器学习领域,对Spark和Scala非常陌生。从机器学习的角度来看,只要它们是相同的数据,我就不关心它们在内存中是如何存储或表示的。因此,我很难将相同的数据从一种格式转换为另一种格式。你对我的经历有什么想法吗?再次感谢。我认为本地结构和分布式结构之间的这种脱节很糟糕。我只使用了很少的MLlib,所以我不能说这是否可以修复。也许你可以在用户的邮件列表上询问(请参阅),或者再等一会儿,希望比我更了解的人看到这个问题。如何将此转换应用于pca。@DanielDarabos