Spark Mllib里的本地向量集(密集型数据集和稀疏型数据集概念、构成)(图文详解)
不多说,直接上干货!
Local vector : 本地向量集
由两类构成:稀疏型数据集(spares)和密集型数据集(dense)
(1)、密集型数据集
例如一个向量数据(9,5,2,7),可以设定为(9,5,2,7)进行存储,数据集被作为一个集合的形式整体存储。
(2)、稀疏型数据集
例如一个向量数据(9,5,2,7),可以按向量的大小存储为(4,Array(0,1,2,3),Array(9,5,2,7))
testVector.scala
package zhouls.bigdata.chapter4 import org.apache.spark.mllib.linalg.{Vector, Vectors} object testVector { /* * 主函数 */ def main(args: Array[String]) { val vd: Vector = Vectors.dense(2, 0, 6) //建立密集向量 println(vd(2)) //打印密集向量第3个值 val vs: Vector = Vectors.sparse(4, Array(0,1,2,3), Array(9,5,2,7))//建立稀疏向量 println(vs(2)) //打印稀疏向量第3个值 } }
有人会问,为什么会输出来为浮点型数了呢。
答:对于目前,Spark Mllib,仅支持整数与浮点型数。这是因为与其目的数值计算有关。
dense方法,不多赘述。
sparse方法,第一个参数4是代表输入数据的大小,一般要求大于等于输入的数据值。
第二个参数Array(0,1,2,3)是数据vs下标的数值
第三个参数Array(9,5,2,7)是输入的数据值,一般要求将其作为一个Array类型的数据进行输入
总结
Spark MLlib的本地向量主要分为两种,DenseVector和SparseVector,顾名思义,前者是用来保存稠密向量,后者是用来保存稀疏向量,其创建方式主要有一下三种(三种方式均创建了向量(1.0, 0.0, 2.0):
import org.apache.spark.mllib.linalg.{Vector, Vectors} //创建一个稠密向量 val dv : Vector = Vector.dense(1.0,0.0,3.0); //创建一个稀疏向量(第一种方式) val sv1: Vector = Vector.sparse(3, Array(0,2), Array(1.0,3.0)); //创建一个稀疏向量(第二种方式) val sv2 : Vector = Vector.sparse(3, Seq((0,1.0),(2,3.0)))
更多具体,见
Spark Mllib机器学习实战的第4章 Mllib基本数据类型和Mllib数理统计
作者:大数据和人工智能躺过的坑
出处:http://www.cnblogs.com/zlslch/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击右下角的【好文要顶】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!