Spark本地向量(Local vector)详细解析

 一个本地向量拥有从0开始的integer类型的索引以及double类型的值,它保存在单台机器上面。MLlib支持两种类型的本地向量:稠密(dense)向量和稀疏(sparse)向量。 一个稠密向量通过一个double类型的数组保存数据,这个数组表示向量的条目值(entry values);一个稀疏向量通过两个并行的数组(indices和values)保存数据。例如:

向量(5.2,0.0,5.5)

密集向量表示:[5.2,0.0,5.5]

稀疏向量表示:(3,[0,2],[5.2,5.5])    # 3是向量(5.2,0.0,5.5)的长度,除去0值外,其他两个值的索引和值分别构成了数组[0,2]和数组[5.2,5.5]。

Vector是所有局部向量的基类,Dense-Vector和SparseVector都是Vector的具体实现。

  本地向量的基类是VectorSpark提供了两种实现: DenseVectorSparseVector。 Spark官方推荐使用Vectors中实现的工厂方法去创建本地向量。下面是创建本地向量的例子。

 

import org.apache.spark.mllib.linalg.{Vector, Vectors}
// 创建一个dense vector (5.2, 0.0, 5.5).
val dv: Vector = Vectors.dense(5.2, 0.0, 5.5)
// 创建一个sparse vector (5.2, 0.0, 5.5)并且指定它的索引和值
val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(5.2, 5.5))
// 创建一个sparse vector (5.2, 0.0, 5.5)并且指定它的索引和值,通过指定非0的值,位置0是5.2,位置2是5.5
val sv2: Vector = Vectors.sparse(3, Seq((0, 5.2), (2, 5.5)))

   注意,Scala默认引入scala.collection.immutable.Vector,这里我们需要主动引入MLLib中的org.apache.spark.mllib.linalg.Vector来操作。我们可以看看Vectors对象的部分方法。

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注