spark mlib行索引矩阵

  • 索引行矩阵IndexedRowMatrixRowMatrix相似,但它的每一行都带有一个有意义的行索引值,这个索引值可以被用来识别不同行,或是进行诸如join之类的操作。
  • 其数据存储在一个由IndexedRow组成的RDD里,即每一行都是一个带长整型索引的本地向量
  • 与RowMatrix类似,IndexedRowMatrix的实例可以通过RDD[IndexedRow]实例来创建

案例

import org.apache.spark.mllib.linalg
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.linalg.distributed.{IndexedRow, IndexedRowMatrix}
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession


object Test2 {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().master("local").getOrCreate()
    //创建稠密向量
    val dv1: linalg.Vector = Vectors.dense(1.0, 2.0, 3.0)
    val dv2: linalg.Vector = Vectors.dense(2.0, 3.0, 4.0)
    // 通过本地向量dv1 dv2来创建对应的IndexedRow
    // 在创建时可以给定行的索引值,如这里给dv1的向量赋索引值1,dv2赋索引值2
    val row1: IndexedRow = IndexedRow(1, dv1)
    val row2: IndexedRow = IndexedRow(2, dv2)
    //使用两个IndexedRow创建一个RDD[IndexedRow]
    val rows: RDD[IndexedRow] = spark.sparkContext.parallelize(Array(row1, row2))
    //通过RDD[IndexedRow]创建行索引矩阵
    val matrix = new IndexedRowMatrix(rows)
    val rdd: RDD[IndexedRow] = matrix.rows
    //IndexedRow(1,[1.0,2.0,3.0])
    //IndexedRow(2,[2.0,3.0,4.0])
    rdd.foreach(println)
  }
}

参考

Spark入门:MLlib基本数据类型(2)_厦大数据库实验室博客


版权声明:本文为u010711495原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。