Spark MLlib学习(一)数据类型 Data Types

MLlib——数据类型

  • 局部向量[Local vector]
  • 标记点[Labeled point]
  • 局部矩阵[Local matrix]
  • 分布式矩阵[Distributed matrix]
  • 分块矩阵[BlockMatrix]
  • 行矩阵[RowMatrix]
  • 索引行矩阵[IndexedRowMatrix]
  • 坐标矩阵[CoordinateMatrix]\

1.局部变量[Local vector]
支持两种类型的局部变量;密集型和稀疏性。局部向量存储在单机上,索引从0开始,数值为double类型

1
2
3
4
5
6
7
import org.apache.spark.mllib.linalg.{Vector,Vectors} 
val dv:Vector = Vectors.dense(1.0,0.0,3.0)
dv: org.apache.spark.mllib.linalg.Vector = [1.0,0.0,3.0]
val sv1:Vector = Vectors.sparse(3,Array(0,2),Array(1.0,3.0))
sv1: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[1.0,3.0])
val sv2:Vector = Vectors.sparse(3,Seq((0,1.0),(2,3.0)))
sv2: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[1.0,3.0])

ps: scala默认引入scala.collection.immutable.Vector,所以引入org.apache.spark.mllib.linalg.Vector具体使用Mlib的向量

2、标记点[Labeled point]
用于有监督学习方法,也是局部变量,通过double型标签关联每个向量。标记点乐意用于分类和回归。二分类中,标签为0 or 1,在多分类中,类标记也是从0开始,0,1,2…

1
2
3
4
5
6
import org.apache.spark.mllib.linalg.Vectors 
import org.apache.spark.mllib.regression.LabeledPoint
val pos = LabeledPoint(1.0,Vectors.dense(1,0,3))
pos: org.apache.spark.mllib.regression.LabeledPoint = (1.0,[1.0,0.0,3.0])
val neg = LabeledPoint(0.0,Vectors.sparse(3,Array(0,2),Array(1.0,3.0)))
neg: org.apache.spark.mllib.regression.LabeledPoint = (0.0,(3,[0,2],[1.0,3.0]))

实际应用中会使用稀疏训练数据,MLlib支持读取libsvm格式的训练语料数据。libsvm是一种文本格式,每行表示一个标记的稀疏特征向量。

1
2
3
4
5
import org.apache.spark.mllib.regression.LabeledPoint 
import org.apache.spark.mllib.util.MLUtils import
org.apache.spark.rdd.RDD
val examples:RDD[LabeledPoint] =
MLUtils.loadLibSVMFile(sc,”file:///home/hdfs/data_mllib/sample_libsvm_data.txt”)

3、局部矩阵[Local matrix]
使用整型存储行列索引,double型存储数值,存储在单机上。MLlib支持密集型矩阵,元素按列优先以double数组的方式存储。

1
2
3
4
5
6
7
8
9
10
11
12
import org.apache.spark.mllib.linalg.{Matrix, Matrices} 
val dm: Matrix = Matrices.dense(3, 2, Array(1.0, 3.0, 5.0, 2.0, 4.0, 6.0))
dm: org.apache.spark.mllib.linalg.Matrix =
1.0 2.0
3.0 4.0
5.0 6.0
val sm: Matrix = Matrices.sparse(3, 2, Array(0, 1, 3), Array(0, 2, 1), Array(9, 6, 8))
sm: org.apache.spark.mllib.linalg.Matrix =
3 x 2 CSCMatrix
(0,0) 9.0
(2,1) 6.0
(1,1) 8.0

4、分布式矩阵 distributed matrix
分布式矩阵是long型存储行列索引,double型存储数值,分布存储在一个和多个RDDs。选择合适的矩阵格式很重要,转换格式是会需要全局的suffle,代价较大。有三种分布式的矩阵。基础的是
RowMatrix,行矩阵,按行存储,行号无意义,如特征向量集就可以表示为行矩阵,通过RDD来支撑军阵部分行,每行是一个局部向量。
IndexedRowMatrix 跟RowMatrix类似,但是带有行号,从而可以标记行进行join操作。
CoordinateMatrix以COO(用于存储稀疏矩阵,以链表形式存放元组),格式存储的分布式矩阵,底层为RDD。
(1)行矩阵 RowMatrix
按行分布式存储,无行索引,每行由局部向量表示,列数受限于整数范围。
(2)索引行矩阵 IndexedRowMatrix
(3)坐标矩阵 CooridinateMatrix
(4)分块矩阵 BlockMatrix

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2018-2020 丁振莹
  • 访问人数: | 浏览次数:

你的每一分支持,是我努力下去的最大的力量 ٩(๑❛ᴗ❛๑)۶

支付宝
微信