2 MLlib的数据结构
2.1 本地向量(Local vector)
具有整数类型和基于0的索引和双类型值
本地向量的基类是Vector,我们提供了两个实现:DenseVector
和 SparseVector
◆ 本地向量是存储在本地节点上的,其基本数据类型是Vector.
其有两个子集,分别是密集的与稀疏的
- 密集向量由表示其条目值的双数组支持
- 而稀疏向量由两个并行数组支持:索引和值
我们一般使用Vectors工厂类来生成
例如:
◆ Vectors.dense(1.0,2.0,3.0) 主要使用稠密的
◆ Vectors.sparse(3,(0,1),(1,2),(2,3)) 稀疏的了解即可
向量(1.00.03.0)可以密集格式表示为1.00.03.0,或以稀疏格式表示为(3,02,1.03.0),其中3是矢量的大小。
2.2 标签数据(Labeled point)
与标签/响应相关联的局部矢量,密集或稀疏
在MLlib中,用于监督学习算法。 我们使用双重存储标签,所以我们可以在回归和分类中使用标记点
对于二进制分类,标签应为0(负)或1(正)
对于多类分类,标签应该是从零开始的类索引:0,1,2,…
标记点由事例类 LabeledPoint
表示
◆ 我们在前面介绍过"监督学习”, 知道监督学习是(x,y)数据形式,其中这个y就是标签,X是特征向量
标签数据也是一样,我们看一下这个代码
LabeledPoint(1.0,Vectors.dense(1.0,2.0,3.0))
2.3 本地矩阵
本地矩阵具有整数类型的行和列索引和双类型值,存储在单个机器上。 MLlib支持密集矩阵,其入口值以列主序列存储在单个双阵列中,稀疏矩阵的非零入口值以列主要顺序存储在压缩稀疏列(CSC)格式中
与向量相似,本地矩阵类型为Matrix , 分为稠密与稀疏两种类型。同样使
用工厂方法Matrices来生成。但是要注意,MLlib的矩阵是按列存储的。
例如下面创建一个3x3的单位矩阵:
Matrices.dense(3,3,Array(1,0,0,0,1,0,0,0,1))
类似地,稀疏矩阵的创建方法
Matrices.sparse(3,3,Array(0,1,2,3),Array(0,1,2),Array(1,1,1))
2.4 分布式矩阵
◆ 把一个矩数据分布式存储到多个RDD中
将分布式矩阵进行数据转换需要全局的shuffle函数
最基本的分布式矩阵是RowMatrix.
分布式矩阵具有长类型的行和列索引和双类型值,分布式存储在一个或多个RDD中。选择正确的格式来存储大型和分布式矩阵是非常重要的。将分布式矩阵转换为不同的格式可能需要全局shuffle,这是相当昂贵的。到目前为止已经实现了四种类型的分布式矩阵。
基本类型称为RowMatrix。 RowMatrix是没有有意义的行索引的行向分布式矩阵,例如特征向量的集合。它由其行的RDD支持,其中每行是局部向量。我们假设RowMatrix的列数不是很大,因此单个本地向量可以合理地传递给驱动程序,也可以使用单个节点进行存储/操作。 IndexedRowMatrix与RowMatrix类似,但具有行索引,可用于标识行和执行连接。 CoordinateMatrix是以坐标 list(COO) 格式存储的分布式矩阵,由其条目的RDD支持。 BlockMatrix是由MatrixBlock的RDD支持的分布式矩阵,它是(Int,Int,Matrix)的元组。
2.5 分布式数据集
◆ RDD Dataset DataFrame都是Spark的分布式数据集的数据格式
三者在一定程度上可以互相转化,有各自的适用范围
其中RDD是最为基础与简单的一种数据集形式
2.5.1 RDD
◆ RDD(Resilient Distributed Datasets),弹性分布式数据集,是Spark中结构最简单,也是最常用的一类数据集形 式。
可以理解为把输入数据进行简单的封装之后形成的对内存数据的抽象。
2.5.2 Dataset
◆ 与RDD分行存储,没有列的概念不同,Dataset 引入了列的概念,这一点类似于一个CSV文件结构。类似于一个简单的2维表
2.5.3 DataFrame
DataFrame结构与Dataset 是类似的,都引|入了列的概念
与Dataset不同的是,DataFrame中的毎一-行被再次封装刃Row的対象。需要通过该対象的方法来获取到具体的值.
3 MLlib与ml
3.1 Spark提供的机器学习算法
◆ 通用算法
分类,回归,聚类等
◆ 特征工程类
降维,转换,选择,特征提取等
◆数学工具
概率统计 ,矩阵运算等
◆ pipeline 等
3.2 MLlib与ml的区别
MLlib采用RDD形式的数据结构,而ml使用DataFrame的结构.
◆ Spark官方希望 用ml逐步替换MLlib
◆ 教程中两者兼顾
如无特殊指明,MLlib指代Spark的机器学习组件
4 MLlib的应用场景
4.1 海量数据的分析与挖掘
◆ 例如对海量的房屋出租,出售信息进行数据挖掘,预测房价价格,租金
◆ 典型数据集:波士顿房价数据集
◆ 主要用到传统的数据挖掘算法,例如使用回归算法
4.2 大数据机器学习系统
◆ 例如自然语言处理类的系统,推荐系统等
◆ 推荐系统,需要实时进行数据的收集,统计,任务调度,定期更新训练模型
◆ 核心实现: Spark Streaming +MLlib