import org.apache.spark.mllib.linalg.Vectors
object Test {
def main(args: Array[String]) {
val vd = Vectors.dense(2, 5, 8)
println(vd(1))
println(vd)
//向量個數,序號,value
val vs = Vectors.sparse(4, Array(0, 1, 2, 3), Array(9, 3, 5, 7))
println(vs(0)) //序號訪問
println(vs)
val vs2 = Vectors.sparse(4, Array(0, 2, 1, 3), Array(9, 3, 5, 7))
println(vs2(2))
println(vs2)
}
}
5.0
[2.0,5.0,8.0]
9.0
(4,[0,1,2,3],[9.0,3.0,5.0,7.0])
3.0
(4,[0,2,1,3],[9.0,3.0,5.0,7.0])
本地向量(Local Vector)存儲在單台機器上,索引采用0開始的整型表示,值采用Double類型的值表示。Spark MLlib中支持兩種類型的矩陣,
分別是密度向量(Dense Vector)和稀疏向量(Spasre Vector),密度向量會存儲所有的值包括零值,而稀疏向量存儲的是索引位置及值,
不存儲零值,在數據量比較大時,稀疏向量才能體現它的優勢和價值。下面給出其應用示例:
spark 稠密向量和稀疏向量
Spark mlib的本地向量有兩種: DenseVctor :稠密向量 其創建方式 Vector.dense(數據) SparseVector :稀疏向量 其創建方式有兩種: 方法一:Vector.sparse(向量長度,索引數組,與索引數組所對應的數值數組) 方法二:Vector.sparse(向量長度,(索引,數值),(索引,數值),(索引,數值),...(索引,數值)) 示例: 比如向量(1,0,3,4)的創建有三種方法: 稠密向量:直接Vectors.dense(1,0,3,4) 稀疏向量: 方法一:Vector.sparse(4,(0,2,3),(1,3,4)) (0,2,3) 表示該向量的第0個,第2個,第3個位置,(1,3,4) 表示(0,2,3)位置對應的數值分別為1,3,4 方法二:Vector.sparse(4,(0,1),(2,3),(3,4)) (0,1)就是(索引,數值)的形式。位置0的數值為1, 位置2的數值為3,位置3的數值為4
