- 索引行矩阵
IndexedRowMatrix与RowMatrix相似,但它的每一行都带有一个有意义的行索引值,这个索引值可以被用来识别不同行,或是进行诸如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)
}
}
参考
版权声明:本文为u010711495原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。