【问题标题】:How to convert matrix to RDD[Vector] in spark如何在火花中将矩阵转换为 RDD[Vector]
【发布时间】:2015-03-25 08:49:25
【问题描述】:

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

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

【问题讨论】:

  • 您能更具体地了解一下这些类型吗? (Vector 是不可变的 Scala 向量 (scala-lang.org/api/current/…) 还是 Java 的 java.util.Vector,还是来自 Python 的东西?矩阵是如何表示的,它的类型是什么?)
  • @GáborBakos:从Jiang 的编辑看来,我们正在谈论MLlib 的MatrixVector

标签: scala apache-spark


【解决方案1】:

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 cluster方法来查找矩阵的簇,但是kmeans方法只接受RDD。
  • 啊,我明白了!我已将答案更新为不那么刻薄:)。希望代码能正常工作!
  • 非常感谢!我来自机器学习领域,对 Spark 和 Scala 非常陌生。从机器学习的角度来看,只要它们是相同的数据,我并不关心它们在内存中是如何存储或表示的。所以我很难将相同的数据从一种格式转换为另一种格式。你对我的经历有什么想法吗?再次感谢。
  • 我认为本地结构和分布式结构之间的这种脱节很糟糕。我只很少使用 MLlib,所以我不能说这是否可以修复。也许您可以在用户的​​邮件列表中询问(请参阅spark.apache.org/community.html)或多等一会儿,希望比我更有知识的人看到这个问题。
  • 如何为 pca 应用此转换。@DanielDarabos
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
相关资源
最近更新 更多