2015-10-05 95 views
5

我是Spark和Scala的新手,我正在嘗試閱讀關於MLlib的文檔。將本地向量轉換爲RDD [矢量]

http://spark.apache.org/docs/1.4.0/mllib-data-types.html教程,

import org.apache.spark.mllib.linalg.Vector 
import org.apache.spark.mllib.linalg.distributed.RowMatrix 

val rows: RDD[Vector] = ... // an RDD of local vectors 
// Create a RowMatrix from an RDD[Vector]. 
val mat: RowMatrix = new RowMatrix(rows) 

// Get its size. 
val m = mat.numRows() 
val n = mat.numCols() 

不顯示如何從本地向量的列表構建RDD [向量](可變行)。

因此,舉例來說,我已經執行(如我的探索的一部分)在火花外殼

val v0: Vector = Vectors.dense(1.0, 0.0, 3.0) 
val v1: Vector = Vectors.sparse(3, Array(1), Array(2.5)) 
val v2: Vector = Vectors.sparse(3, Seq((0, 1.5),(1, 1.8))) 

這要是「合併」將是這樣的矩陣

1.0 0.0 3.0 
0.0 2.5 0.0 
1.5 1.8 0.0 

那麼,怎麼辦我將載體v0,v1, v2轉換爲rows

+1

'val rows = sc.parallelize(Seq(v0,v1,v2))' – zero323

+0

爲什麼downvote? – menorah84

回答

7

利用星火語境其並行序列的屬性,我們可以達到你想要的東西,既然你已經創建的載體,現在你需要給他們帶來的序列,並通過下面給出的處理並行。

import org.apache.spark.mllib.linalg.Vectors 
import org.apache.spark.mllib.linalg.distributed.RowMatrix 

val v0 = Vectors.dense(1.0, 0.0, 3.0) 
val v1 = Vectors.sparse(3, Array(1), Array(2.5)) 
val v2 = Vectors.sparse(3, Seq((0, 1.5), (1, 1.8))) 

val rows = sc.parallelize(Seq(v0, v1, v2)) 

val mat: RowMatrix = new RowMatrix(rows) 

// Get its size. 
val m = mat.numRows() 
val n = mat.numCols()