一.本地向量

  有如下几个类: Vector(基类),DenseVector,SparseVector,Vectors(工厂方法,推荐用)

工厂模式是:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类

import org.apache.spark.mllib.linalg.{Vectors,Vector}    # linalg is short for linear algebra

val v1=Vectors.dense(1.0,2.0,3.0)  #定义1

val v2 =Vectors.sparse(3,(1,2),(10,100)) #长度为3,第1,2个位置的值为10和100

val v3=Vectors.sparse(3,Seq((1,10),(2,100))) #结果同上

二.带有标签的向量

  主要应用在有监督学习中,二分类(0,1),多分类(0,1,2,3,....)

import org.apache.spark.mllib.Regression.LabeledPoint;

val vl1=LabeledPoint(1,Vectors.dense(1,2,3,4))

val vl2=LabeledPoint(0,Vectors.sparse(3,(1,2),(10,100)))

三.读取LIBSVM格式的数据

<label> <index1>:<value1> <index2>:<value2> ...
其中<label> 是训练数据集的目标值,对于分类,它是标识某类的整数(支持多个类);对于回归,是任意实数。<index> 是以1开始的整数,可以是不连续的;<value>;为实数,也就是我们常说的自变量。检验数据文件中的label只用于计算准确度或误差,如果它是未知的,只需用一个数填写这一栏,也可以空着不填.
例如:

0 1:10 3:19
1 1:18 3:20 4:178

import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.rdd.RDD
 
val svmfile=MLUtils.loadLibSVMFile(sc,"svmdata2")
 
四.创建本地矩阵
  本地矩阵是行列号索引,值为double类型的数据,存储在单独的机器上.支持稠密矩阵和稀疏矩阵。
与Vector和Vectors的关系类似,Matrix有对应的Matrices
  对于稀疏矩阵的压缩方法,具体可以参考http://www.tuicool.com/articles/A3emmqi,spark默认的为CSC格式的压缩
 
import org.apache.spark.mllib.linalg.{Matrix,Matrices}
val m1=Matrices.dense(3,2,Array(1,2,3,4,5,6))
val m2=Matrices.sparse(3,2,Array(0,1,3),Array(0,2,1),Array(9,6,8))  
参考csc压缩方法,m2 手工算的结果,应该是 
(0,0)9
(2,0)6
(1,1)8
与spark计算的有出入。
 
五.分布式矩阵
  选择一个正确的形式去存储大的分布式矩阵非常重要, 将分布式矩阵转化为不同的格式需要全局的shuffle,代价很大。目前有三种类型的分布式矩阵,RowMatrix,IndexedRowMatrix,CoordinateMatrix.
  什么是shuffle呢?参考http://dongxicheng.org/framework-on-yarn/apache-spark-shuffle-details/
通常shuffle分为两部分,map阶段的数据准备以及Reduce阶段的数据拷贝,Map阶段需要根据Reduce阶段的Task数量决定每个Map Task输出的数据分片数目
 
RowMatrix是没有行索引,例如一些特征向量,没一行是一个本地向量。
IndexedRowMatrix,有行索引,可以用于识别行和执行链接操作
CoordinateMatrix存成COO形式
 
构造RowMatrix
import org.apache.spark.mllib.linalg.{Vector,Vectors}
import org.apache.spark.mllib.linalg.distributed.RowMatrix
val data=sc.parallelize(1 to 9,3) #RDD形式
val rows=data.map(x=>Vectors.dense(x))
val m1=new RowMatrix(rows,3,3)
m1.numRows
m1.numCols
 
 构造IndexedRowMatrix
import org.apache.spark.mllib.linalg.distributed.{IndexedRow, IndexedRowMatrix, RowMatrix}
val data1=sc.parallelize(1 to 12,2)
val rows1=data1.map(x=>IndexedRow(2,Vectors.dense(x)))
val mat=new IndexedRowMatrix(rows1,3,4) 
mat.numRows()
mat.numCols()
 
构造COO #对于稀疏矩阵比较有用,指定非空元素的行列以及value即可
import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry} 
val data2=sc.parallelize(1 to 20 ,4)
val rows2=data1.map(x=>MatrixEntry(1,1,3)) 
val m2=new CoordinateMatrix(rows2,4,5)
#
val data3=sc.textFile("coo").map(_.split(' ')).map(_.map(_.toDouble)).map(m=>(m(0).toLong,m(1).toLong,m(2))).map(x=>new MatrixEntry(x._1,x._2,x._3))
val m3=new CoordinateMatrix(data3,3,4)
 
#构造BlockMatrix
val m4=m3.toBlockMatrix()
 
 
 
 

Spark-Mllib(一)数据类型的更多相关文章

  1. Spark Mllib里的Mllib基本数据类型(图文详解)

    不多说,直接上干货! Spark Mllib基本数据类型,根据不同的作用和应用场景,分为四种不同的类型 1.Local  vector : 本地向量集,主要向spark提供一组可进行操作的数据集合 2 ...

  2. Spark MLlib数据类型

        MLlib支持几种数据类型:本地向量(local vectors),和存储在一个简单机器中的矩阵(matrices),以及由一个或多个RDDs组成的分布式矩阵. 1,本地向量(Local Ve ...

  3. spark MLlib DataType ML中的数据类型

    package ML.DataType; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; im ...

  4. 《Spark MLlib机器学习实践》内容简介、目录

      http://product.dangdang.com/23829918.html Spark作为新兴的.应用范围最为广泛的大数据处理开源框架引起了广泛的关注,它吸引了大量程序设计和开发人员进行相 ...

  5. Spark MLlib Data Type

    MLlib 支持存放在单机上的本地向量和矩阵,也支持通过多个RDD实现的分布式矩阵.因此MLlib的数据类型主要分为两大类:一个是本地单机向量:另一个是分布式矩阵.下面分别介绍一下这两大类都有哪些类型 ...

  6. Spark入门实战系列--8.Spark MLlib(下)--机器学习库SparkMLlib实战

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .MLlib实例 1.1 聚类实例 1.1.1 算法说明 聚类(Cluster analys ...

  7. Spark MLlib知识点学习整理

    MLlib的设计原理:把数据以RDD的形式表示,然后在分布式数据集上调用各种算法.MLlib就是RDD上一系列可供调用的函数的集合. 操作步骤: 1.用字符串RDD来表示信息. 2.运行MLlib中的 ...

  8. spark MLLib的基础统计部分学习

    参考学习链接:http://www.itnose.net/detail/6269425.html 机器学习相关算法,建议初学者去看看斯坦福的机器学习课程视频:http://open.163.com/s ...

  9. 使用Spark MLlib进行情感分析

    使用Spark MLlib进行情感分析             使用Spark MLlib进行情感分析 一.实验说明 在当今这个互联网时代,人们对于各种事情的舆论观点都散布在各种社交网络平台或新闻提要 ...

  10. spark 机器学习基础 数据类型

    spark的机器学习库,包含常见的学习算法和工具如分类.回归.聚类.协同过滤.降维等使用算法时都需要指定相应的数据集,下面为大家介绍常用的spark ml 数据类型.1.本地向量(Local Vect ...

随机推荐

  1. 通过Daffodil for VS使VS2010的IDE可以用VC6 VC7.1 VC9等编译器进行项目编译

    本文内容中的部分资料和知识来源于网络,具体引用出处不明. VS的IDE从VC6到VS2010的变化可谓是天翻地覆,最新的VS2010有一个特性就是支持多显示器开发,这无疑为我们的开发带来很大的便利. ...

  2. 3.1 哈尔空间 V0

    一张灰度图是由多个像素点而组成的,同样,这些像素点的是由一个从0(黑)到255(白)的非负数组成的.假设我们现在有一张小的灰度图像.在第一行的灰度值为110,100,120,140,130,100,1 ...

  3. Eclipse连接VirtualBox中的Android x86

    Android x86 Alt+F1打开命令行,命令netcfg查看当前ip,记住,然后Alt+F7回界面. Eclipse-Window-Preferences-Android-DDMS-Use A ...

  4. [转载]Java程序员使用的20几个大数据工具

    最近我问了很多Java开发人员关于最近12个月内他们使用的是什么大数据工具. 这是一个系列,主题为: 语言web框架应用服务器SQL数据访问工具SQL数据库大数据构建工具云提供商今天我们就要说说大数据 ...

  5. Android 进程通信机制之 AIDL

    什么是 AIDL AIDL 全称 Android Interface Definition Language,即 安卓接口描述语言.听起来很深奥,其实它的本质就是生成进程间通信接口的辅助工具.它的存在 ...

  6. Git Pro - (2)分支

    Git 保存的不是文件差异或者变化量,而只是一系列文件快照. 在 Git中提交时,会保存一个提交(commit)对象,它包含一个指向暂存内容快照的指针,作者和相关附属信息,以及一定数量(也可能没有)指 ...

  7. 【转】去掉Sqlite3 数据库中的前后回车换行符(newline)

    原文: http://www.blogjava.net/pts/archive/2013/06/10/400... 时间: 2013-06-10 转自:http://www.ityuedu.com/a ...

  8. C#实用技能篇

    Redis配置文件详解 如果不指定配置文件,redis也可以启动,此时,redis使用默认的内置配置.不过在正式环境,常常通过配置文件[通常叫redis.conf]来配置redis. redis.co ...

  9. android需知小细节

    1. 布局文件命名不能包含大写字母,特殊字符.MyImageView.xml错误. 2. simpleAdapter适配器参数的含义:  3. gridview gridview的三个重要的属性: 4 ...

  10. oozie调用shell

    <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agree ...