import org.apache.spark.mllib.linalg
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, 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()
    //创建稠密向量
    val dv1: linalg.Vector = Vectors.dense(1.0, 1.0, 3.0)
    val dv2: linalg.Vector = Vectors.dense(2.0, 2.0, 4.0)
    //使用两个本地向量创建一个RDD[Vector]
    val rows: RDD[linalg.Vector] = spark.sparkContext.parallelize(Array(dv1, dv2))
    //通过RDD[Vector]创建一个行矩阵
    val matrix = new RowMatrix(rows)
    //返回类型是CoordinateMatrix,一个矩阵,该矩阵下标为(x,y)的元素就是原矩阵第x列和第y列的相似度。
    //MatrixEntry(0,1,0.9999999999999999) 就是第0列和第一列的相似度是0.9999999999999999
    //MatrixEntry(1,2,0.9838699100999074)
    //MatrixEntry(0,2,0.9838699100999074)
    val matrix1: CoordinateMatrix = matrix.columnSimilarities()
    matrix1.entries.foreach(println)
  }
}

参考

怎样使用Spark计算一个集合各个元素(向量表示的)的两两之间的余弦相似度? - 知乎

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐