将本地向量转换为RDD [Vector]

men*_*h84 5 scala apache-spark

我是Spark和Scala的新手,我正在尝试阅读有关MLlib的文档.

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()
Run Code Online (Sandbox Code Playgroud)

没有说明如何从局部向量列表构造RD​​D [Vector](变量行).

例如,我已经在spark-shell中执行了(作为我探索的一部分)

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)))
Run Code Online (Sandbox Code Playgroud)

如果'合并'将看起来像这个矩阵

1.0  0.0  3.0
0.0  2.5  0.0
1.5  1.8  0.0
Run Code Online (Sandbox Code Playgroud)

那么,如何转变的载体v0,v1,v2rows

Ksh*_*tha 8

通过使用并行化Sequence的Spark Context的属性,我们可以实现你想要的东西,因为你已经创建了向量,现在所有你需要按顺序引入它们并通过下面给出的过程并行化.

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()
Run Code Online (Sandbox Code Playgroud)