如何轉換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