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