spark mlib坐标矩阵(Coordinate Matrix)

坐标矩阵CoordinateMatrix是一个基于矩阵项构成的RDD的分布式矩阵。每一个矩阵项MatrixEntry都是一个三元组:(i: Long, j: Long, value: Double),其中i是行索引,j是列索引,value是该位置的值。

  • 坐标矩阵一般在矩阵的两个维度都很大,且矩阵非常稀疏的时候使用。

CoordinateMatrix实例可通过RDD[MatrixEntry]实例来创建,其中每一个矩阵项都是一个(rowIndex, colIndex, elem)的三元组

import org.apache.spark.mllib.linalg
import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry, RowMatrix}
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SparkSession


object Test {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().master("local").getOrCreate()
    //创建两个矩阵项ent1和ent2,每一个矩阵项都是由索引和值构成的三元组
    val ent1 = new MatrixEntry(0, 1, 0.5)
    val ent2 = new MatrixEntry(2, 2, 1.8)
    val entries: RDD[MatrixEntry] = spark.sparkContext.parallelize(Array(ent1, ent2))
    //通过RDD[MatrixEntry]创建一个坐标矩阵
    val matrix = new CoordinateMatrix(entries)
    //从matrix提取rdd
    val entries1: RDD[MatrixEntry] = matrix.entries
    //MatrixEntry(0,1,0.5)
    //MatrixEntry(2,2,1.8)
    entries1.foreach(println)
    //坐标矩阵可以进行转置
    val matrix1: CoordinateMatrix = matrix.transpose()
    //MatrixEntry(1,0,0.5)
    //MatrixEntry(2,2,1.8)
    matrix1.entries.foreach(println)
    //坐标矩阵可以转为行矩阵
    val rowmatrix: RowMatrix = matrix.toRowMatrix()
    val rows: RDD[linalg.Vector] = rowmatrix.rows
    //[0.0,0.5,0.0]
    //[0.0,0.0,1.8]
    rows.foreach((x: linalg.Vector) => {
      println(x.toDense)
    })
    //计算相似度矩阵
    val simMatrix: CoordinateMatrix = rowmatrix.columnSimilarities()
    simMatrix.toRowMatrix().rows.foreach((x: linalg.Vector) =>{
      println(x.toDense)
    })
  }
}

参考

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值