MLlib中的数据类型

    xiaoxiao2021-03-25  19

    http://spark.apache.org/docs/1.6.3/mllib-data-types.html

    Local Vector

    有两种:dense、sparse

    For example, a vector (1.0, 0.0, 3.0) can be represented in dense format as [1.0, 0.0, 3.0] or in sparse format as (3, [0, 2], [1.0, 3.0]), where 3 is the size of the vector.

    import org.apache.spark.mllib.linalg.{Vector,Vectors} // Create a dense vector (1.0, 0.0, 3.0). val dv: Vector = Vectors.dense(1.0, 0.0, 3.0) // Create a sparse vector (1.0, 0.0, 3.0) by specifying its indices and values corresponding to nonzero entries. val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0)) // Create a sparse vector (1.0, 0.0, 3.0) by specifying its nonzero entries. val sv2: Vector = Vectors.sparse(3, Seq((0, 1.0), (2, 3.0)))

    import org.apache.spark.mllib.linalg.{Vector, Vectors} dv: org.apache.spark.mllib.linalg.Vector = [1.0,0.0,3.0] sv1: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[1.0,3.0]) sv2: org.apache.spark.mllib.linalg.Vector = (3,[0,2],[1.0,3.0])

    Labeled point

    本身也是一个local vector,但有label。常用在监督学习算法里。多分类问题,lable必须从0开始,0,1,2,。。。

    import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.mllib.regression.LabeledPoint // Create a labeled point with a positive label and a dense feature vector. val pos = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0))

    Local Matrix

    也分稠密矩阵与 稀疏矩阵。

    import org.apache.spark.mllib.linalg.{Matrix, Matrices} // Create a dense matrix ((1.0, 2.0), (3.0, 4.0), (5.0, 6.0)),按列存放 val dm: Matrix = Matrices.dense(3, 2, Array(1.0, 3.0, 5.0, 2.0, 4.0, 6.0)) // Create a sparse matrix ((9.0, 0.0), (0.0, 8.0), (0.0, 6.0)) val sm: Matrix = Matrices.sparse(3, 2, Array(0, 1, 3), Array(0, 2, 1), Array(9, 6, 8)) // 第一个Array表示从第几个元素开始新起一列存放,第二个Array表示非零元素的行号,第三个Array表示非零元素的值。

    dm: org.apache.spark.mllib.linalg.Matrix = 1.0 2.0 3.0 4.0 5.0 6.0 sm: org.apache.spark.mllib.linalg.Matrix = 3 x 2 CSCMatrix (0,0) 9.0 (2,1) 6.0 (1,1) 8.0

    Distributed matrix

    第一种:RowMatrix,

    按行存放的,每行是Local Vector。所以列数受限于integer的范围。

    我们可以对每列进行统计描述,还可以进行QR分解。在SVD、PCA中有用到。

    import org.apache.spark.mllib.linalg.Vector import org.apache.spark.mllib.linalg.distributed.RowMatrix val rows: RDD[Vector] = ... // an RDD of local vectors // Create a RowMatrix from an RDD[Vector]. val mat: RowMatrix = new RowMatrix(rows) // QR decomposition val qrResult = mat.tallSkinnyQR(true)

    第二种:IndexedRowMatrix

    第三种:CoordinateMatrix

    只适用于matrix的维度比较大,并且很稀疏。

    Each entry is a tuple of (i: Long, j: Long, value: Double), where i is the row index, j is the column index, and value is the entry value.

    第四种  BlockMatrix PS。如何将RDD中的类型转换成自己想要的?

    答:利用map,对每行数据进行类型转换。

    import org.apache.spark.mllib.linalg.{Vector,Vectors} val m1 = sc.textFile("/user/hadoop-generalshop/caiqi.sun/spark/ml/matrix.txt").map{ r => val row = r.split(" ").map(_.toDouble) (Vectors.dense(row)) }

    import org.apache.spark.mllib.linalg.{Vector, Vectors} m1: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] = MapPartitionsRDD[12] at map at <con

    PPS。如何创建RDD?

    1)从Hadoop文件系统(如HDFS、Hive、HBase)输入创建。 2)从父RDD转换得到新RDD。 3)通过parallelize或makeRDD将单机数据创建为分布式RDD。 从集合创建RDD: var rdd = sc.parallelize( 1  to  10 var rdd = sc.makeRDD(collect)  4)基于DB(Mysql)、NoSQL(HBase)、S3(SC3)、数据流创建。

    转载请注明原文地址: https://ju.6miu.com/read-300376.html

    最新回复(0)