介绍
关于矩阵是我们Spark机器学习里面最重要的一部分知识之一了,今天就介绍下矩阵的使用与实战代码
矩阵首先分为密集矩阵和稀疏矩阵,这个参考我之前一篇博客里面写的,还是介绍的比较详细的,不清楚的也可以去看看Spark源码里面对他们两个的定义,我主要是讲讲运用的部分,这个请直接看下面代码部分就行;
然后就是本地矩阵,这个适合单机部署,很方便,运用部分也请看实战部分;
最后就是我们最重要的分布式矩阵,代码里重点实战的是带索引的行矩阵和坐标矩阵;
分布式矩阵的使用
一般来说,采用分布式矩阵进行存储的情况数据量都是非常大的,其处理速度和效率与其存储格式息息相关。MLlib提供了四种分布式矩阵存储形式,均由支持长整型的行列数和双精度浮点型的数据内容构成。这四种矩阵分别为:行矩阵、带有行索引的行矩阵、坐标矩阵和块矩阵,这次代码我只介绍前三种,块矩阵应用较少,这里我就不多做介绍。
代码实战部分
package vector import org.apache.log4j.{Level, Logger} import org.apache.spark.mllib.linalg.distributed._ import org.apache.spark.mllib.linalg.{Matrices, Vectors, Vector} import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.mllib.util.MLUtils import org.apache.spark.{SparkContext, SparkConf} /** * Created by 汪本成 on 2016/8/2. */ object MLlibUtils { //屏蔽不必要的日志显示在终端上 Logger.getLogger("org.apache.spark").setLevel(Level.WARN) Logger.getLogger("org.apache.eclipse.jetty.server").setLevel(Level.OFF) //程序入口 val conf = new SparkConf().setAppName("MLlibUtils").setMaster("local[1]") val sc = new SparkContext(conf) val LIBSVM_PATH = "G://a.txt" val MATRIX_PATH = "G://b.txt" val array_Int = Array(1.0, 2.0, 3.0, 4.0, 5.0, 6.0) def main(args: Array[String]) { use_Vector() //use_LoadLibSVMFile(LIBSVM_PATH) use_Matrix(2, 3, array_Int) use_RowMatrix(MATRIX_PATH) use_InDexRowMatrix(MATRIX_PATH) use_CoordinateRowMatrix(MATRIX_PATH) } /** * Function Feature:建立向量、标签的具体使用 * * dense方法可以理解为MLlib专用的一种集合形式,与Arra |