一、 数据类型
Spark MLlib基本数据类型包括:
1) 本地向量集,主要向spark提供一组可操作的数据集。向量包括稀疏型数据集(spares)和密集型数据集(dense)。
代码示例如下:
val vd:Vector = Vectors.dense(2,0,6) //密集型
val vs:Vector = Vectors.sparse(4,Array(0,1,2,3),Array(9,5,2,7))
2) 向量标签,让用户能够分类不同的数据集合。
代码示例如下:
//使用1)中的向量集
val pos = LabeledPoint(1,vd)
println(pos.features)
println(pos.label)
val neg = LabeledPoint(2,vs)
println(neg.features)
println(neg.label)
3) 本地矩阵,将数据集合以矩阵的形式存储在本地计算机中。
代码示例如下:
val mx = Matrices.dese(2,3,Array(1,2,3,4,5,6))
4)分布式矩阵,将数据集合以分布式矩阵的形式存储在分布式计算机上。MLlib提供的分布式矩阵主要有行矩阵、带有行索引的行矩阵、坐标矩阵和块矩阵。
行矩阵:val rm=new RowMatrix(rdd)
.
带有行索引的行矩阵:
val rdd= sc.textFile("/home/hadoop/data/b.txt").map(_.split(' ').map(_.toDouble))
.map(line => Vectors.dense(line)).map((vd)=>new IndexedRow(vd.size,vd)).
val irm=new IndexRowMatrix(rdd).
println(irm.getClass).
println(irm.rows.foreach(println)).
IndexedRowMatrix还有转换成其他矩阵的功能,toRowMatrix转化为行矩阵,toCoordinateMatrix转化为坐标矩阵,toBlockMatrix转化为块矩阵。
坐标矩阵:
val rdd= sc.textFile("/home/hadoop/data/b.txt").map(_.split(' ').map(_.toDouble))
.map(vue => (vue(0).toLong,vue(1).toLong,vue(2))).map(vue2 => new MatrixEntry(vue2 _1,vue2 _2,vue2 _3)).
val crm = new CoordinateMatrix(rdd).
println(crm.entries.foreach(println))
三个分布式矩阵功能参数上依次增加,高级可以向低级转换。
二、 数理统计
1) 基本统计量包括:colStats,以列为基础计算统计量的基本数据。chiSqTest,对数据集内的数据进行皮尔逊距离计算,根据参量的不同,返回值格式有差异。corr,对两个数据集进行相关系数计算。
2) 统计量基本方法:count,行内数据个数。Max,最大数值单位。Mean,均值。normL1,欧几里得距离。normL2,曼哈顿距离。numNonzeros,不包含0的个数。variance,标准差。
代码示例:
import org.apache.spark.mllib.stat.Statistics
val summary = Statistics.colStats(rdd)
println(summary.normL1)
println(summary.normL2)
Statistics.corr(rdd,"spearman")
//分层抽样
Val fractions:Map[String,Double] = Map(“aa” -> 2)
Val approxSample = data.sampleByKey(withReplacement = false,fractions,0)
approxSample.foreach(println)
//假设检验
val mtx = Matrices.dense(2,3,Array(1,2,3,4,5,6))
Val mtxResult = Statistics.chiSqTest(mtx)