博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark MLib 数据类型
阅读量:5889 次
发布时间:2019-06-19

本文共 2895 字,大约阅读时间需要 9 分钟。

 

1.  MLlib

 

Apache Spark's scalable machine learning library, with APIs in Java, Scala and Python.

2.   数据类型

本地向量,标注点,本地矩阵,分布式矩阵

3. 本地向量 Local Vector

  • 稠密向量 dense        一个double数组,例如 (1.0, 0.0, 0.0, 0.0, 3.0)
  • 稀疏向量 sparse       两个并行的数组(indices和values),例如 (5, [0, 4], [1.0, 3.0]),其中5表示向量元素的个数,[0,4] 是indices,[1.0,3.0]是values

基类是Vector,  org.apache.spark.mllib.linalg.vector引入

import org.apache.spark.mllib.linalg.{Vector, Vectors}  val dv: Vector = Vectors.dense(1.0, 0.0, 3.0)                        // 创建一个dense vector (1.0, 0.0, 3.0).val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0))   // 创建一个sparse vector (1.0, 0.0, 3.0).val sv2: Vector = Vectors.sparse(3, Seq((0, 1.0), (2, 3.0)))        // 等同于sv2

4. 标注点(Labeled Point)

用于有监督学习的训练样本称为标注点。

  • 一个标注点就是一个本地向量(或稠密或稀疏),这个向量和一个标签或者响应相关联。
  • 我们用一个double存储标签,这样我们就可以在回归和分类中使用标注点。
  • 对于二分类,一个标签可能是0或者是1;对于多分类,一个标签可能代表从0开始的类别索引

样本类是LabeledPoint, org.apache.spark.mllib.regression.LabeledPoint 引入。

import org.apache.spark.mllib.linalg.Vectorsimport org.apache.spark.mllib.regression.LabeledPointval pos = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0))  // a positive label and a dense feature vector.val neg = LabeledPoint(0.0, Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0)))  // a negative label and a sparse feature vector.

5. 本地矩阵(Local Matrix)

  • 稠密矩阵    按列顺序存储,用一个数组,加上(列,行) 表示数组大小。
  • 稀疏矩阵    非零条目值保存为压缩稀疏列 CSCCompressed Sparse Column)格式,这种格式也是以列顺序存储

例:   9.0    0.0

     ( 0.0    8.0)

         0.0    6.0

稠密矩阵可以表示为,[3, 2, (9.0 , 0.0, 0.0, 0.0, 8.0, 6.0) ]  其中3为

稀疏矩阵  ??不懂

基类是Matrix, 可以导入 org.apache.spark.mllib.linalg.Matrices 

import org.apache.spark.mllib.linalg.{Matrix,Matrices}val dm: Matrix=Matrices.dense(3,2,Array(9.0,0.0,0.0,0.0,8.0,6.0)              // dense Matrixval sm: Matrix=Matrices.sparse(3,2,Array(0,1,3),Array(0,2,1),Array(9,8,6)) //sparse Matrix

6. 分布式矩阵 Distributed Matrix

一个分布式矩阵拥有long类型的行和列索引,以及double类型的值,分布式的存储在一个或多个RDD

已经实现了3种分布式矩阵:

1)  RowMatrix               

  • 是一个面向行的分布式矩阵,它没有有意义的行索引。行保存为一个RDD,每一行都是一个本地向量。
  • 可以通过  org.apache.spark.mllib.linalg.distributed.RowMatrix 引入。
  • 通过RDD[Vector]实例创建

2) IndexedRowMatrix  

  • 和RowMatrix类似,它拥有行索引,行索引可以用于识别行和进行join操作
  • org.apache.spark.mllib.linalg.distributed.{
    IndexedRow, IndexedRowMatrix, RowMatrix}
  • 可以通过RDD[IndexedRow]实例创建
  • IndexedRowMatrix可以通过去掉它的行索引,转换成RowMatrix

3) CoordinateMatrix    

  •  一个分布式矩阵,它使用COO格式存储 (COO是啥
  • 条目保存为一个RDD。每一个条目是一个(i: Long, j: Long, value: Double)格式的元组,行索引,列索引,value 条目值。 
  • 应该仅仅在矩阵维度很大并且矩阵非常稀疏的情况下使用
  • org.apache.spark.mllib.linalg.distributed.{
    CoordinateMatrix, MatrixEntry} 
  • 通过RDD[MatrixEntry]实例创建

4) BlockMatrix

  • 每个块保存为一个RDD
  • 与CoordinateMatrix类似,是一个((Int, Int), Matrix)类型的元组,其中(Int, Int)代表块的索引,Matrix代表子矩阵。
  • BlockMatrix支持诸如addmultiply等方法。BlockMatrix还有一个帮助方法validate,用来判断一个BlockMatrix是否正确的创建。
  • 调用toBlockMatrix从一个IndexedRowMatrix或者CoordinateMatrix创建一个BlockMatrix。 默认大小为 1024 * 1024 
  • org.apache.spark.mllib.linalg.distributed.BlockMatrix

 

 

  

 

posted on
2016-05-28 17:51 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/skyEva/p/5537981.html

你可能感兴趣的文章
DNS服务器的配置
查看>>
MySQL数据库常见管理应用(1)
查看>>
windows驱动里面的问题
查看>>
CUDA实践指南(四)
查看>>
table合并单元格colspan和rowspan
查看>>
IPVS基于应用层任意偏移字段HASH值的负载均衡算法
查看>>
Nginx技术深度剖析(2)
查看>>
部署P2P升级的脚本
查看>>
jenkins--ant持续集成测试build文件脚本 测试报告
查看>>
ubuntu下安装libxml2
查看>>
nginx_lua_waf安装测试
查看>>
easyui 只刷新当前页面的数据 datagrid reload 方法
查看>>
58到家完成3亿美金A轮融资 阿里平安等投资
查看>>
Mysql-mmm高可用方案安装及配置
查看>>
【狂人小白】MyBatis.001 学习巴提斯!
查看>>
全面解析C#中参数传递
查看>>
修改注册表防止SYN淹没式攻击
查看>>
WinForm窗体缩放动画
查看>>
Memcached 安装及启动脚本
查看>>
如何删除RMAN的CONFIGURE条目
查看>>