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