Spark mlib的本地向量

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。

 所有本地向量都以org.apache.spark.mllib.linalg.Vector为基类,DenseVectorSparseVector分别是它的两个实现类,故推荐使用Vectors工具类下定义的工厂方法来创建本地向  量,请看如下实例(假设在Spark-shell中运行,下同):

  1.  1 scala>import org.apache.spark.mllib.linalg.{Vector, Vectors}
     2 import org.apache.spark.mllib.linalg.{Vector, Vectors}
     3  
     4 // 创建一个稠密本地向量
     5 scala> val dv: Vector = Vectors.dense(2.0, 0.0, 8.0)
     6 dv: org.apache.spark.mllib.linalg.Vector = [2.0,0.0,8.0]
     7 // 创建一个稀疏本地向量
     8 // 方法第二个参数数组指定了非零元素的索引,而第三个参数数组则给定了非零元素值
     9 scala> val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(2.0, 8.0))
    10 sv1: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[2.0,8.0])
    11 // 另一种创建稀疏本地向量的方法
    12 // 方法的第二个参数是一个序列,其中每个元素都是一个非零值的元组:(index,elem)
    13 scala> val sv2: Vector = Vectors.sparse(3, Seq((0, 2.0), (2, 8.0)))
    14 sv2: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[2.0,8.0])

这里需要注意的是,Scala会默认引入scala.collection.immutable.Vector,我们要显式地引入org.apache.spark.mllib.linalg.Vector来使用MLlib提供的向量类型。

原文地址:https://www.cnblogs.com/lyy-blog/p/9288110.html