如何转换org.apache.spark.mllib.linalg.Matrix
至RDD[org.apache.spark.mllib.linalg.Vector]
in Spark?如何将矩阵转换为火花中的RDD [矢量]
该矩阵是从SVD生成的,我使用SVD的结果进行聚类分析。
如何转换org.apache.spark.mllib.linalg.Matrix
至RDD[org.apache.spark.mllib.linalg.Vector]
in Spark?如何将矩阵转换为火花中的RDD [矢量]
该矩阵是从SVD生成的,我使用SVD的结果进行聚类分析。
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)
}
该矩阵是从svd方法生成的。我想使用kmeans聚类方法来查找矩阵的聚类,但kmeans方法只接受RDD。 – 2015-01-27 14:29:36
啊,我明白了!我已经更新了答案,以减少暴躁:)。无论如何希望代码工作! – 2015-01-27 14:40:53
非常感谢!我来自机器学习领域,我对Spark和Scala非常陌生。从机器学习的角度来看,只要它们是相同的数据,我不关心它们如何在内存中存储或表示。所以我很难将相同的数据从一种格式转换为另一种格式。你对我的经历有什么想法吗?再次感谢。 – 2015-01-27 14:47:30
你能具体谈谈哪几类? ('Vector'是不可变的Scala矢量(http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Vector)或Java的'java.util.Vector',或者其他来自Python?矩阵如何表示,它的类型是什么?) – 2015-01-26 21:35:21
@GáborBakos:从江的编辑看来,我们谈论的是MLlib的“矩阵”和“矢量”。 – 2015-01-27 14:43:21