2015-12-06 6 views
0

У меня есть очень простой код, чтобы попробовать косинус Сходство:косинус Similarty через Dimsum в Спарке

import org.apache.spark.{SparkConf, SparkContext} 
import org.apache.spark.mllib.linalg.distributed.{MatrixEntry, CoordinateMatrix, RowMatrix} 

val rows= Array(((1,2,3,4,5),(1,2,3,4,5),(1,2,4,5,8),(3,4,1,2,7),(7,7,7,7,7))) 
val mat = new RowMatrix(rows) 

val simsPerfect = mat.columnSimilarities() 
val simsEstimate = mat.columnSimilarities(0.8) 

я запускаю этот код на Amazon AWS, который имеет Спарк 1.5, однако я получил следующее сообщение в течение последних двух строк: "Erroe: значение columnSymilarments не является членом org.apache.spark.rdd.RDD [(int, int)]"

Не могли бы вы помочь решить эту проблему?

+0

вы уверены, что вы прикладываете columnSimilarities на RowMatrix? – eliasah

+0

Да, приведенный выше код является тем, который я запускаю. val mat = new RowMatrix (rows), предположим, что RomMatrix как мат, так mat.columnSimilarities() применил столбец Сходства с RowMatrix – Amir

+0

Я не могу воспроизвести ошибку ... – eliasah

ответ

1

Я нашел ответ. Мне нужно преобразовать матрицу в RDD. Вот правильный код:

import org.apache.spark.{SparkConf, SparkContext} 
import org.apache.spark.mllib.linalg.distributed.{MatrixEntry, CoordinateMatrix, RowMatrix} 
import org.apache.spark.rdd._ 
import org.apache.spark.mllib.linalg._ 


def matrixToRDD(m: Matrix): RDD[Vector] = { 
val columns = m.toArray.grouped(m.numRows) 
val rows = columns.toSeq.transpose // Skip this if you want a column-major RDD. 
val vectors = rows.map(row => new DenseVector(row.toArray)) 
sc.parallelize(vectors) 
} 

val dm: Matrix = Matrices.dense(5, 5,Array(1,2,3,4,5,1,2,3,4,5,1,2,4,5,8,3,4,1,2,7,7,7,7,7,7)) 
val rows = matrixToRDD(dm) 
val mat = new RowMatrix(rows) 
val simsPerfect = mat.columnSimilarities() 
val simsEstimate = mat.columnSimilarities(0.8) 

println("Pairwise similarities are: " + simsPerfect.entries.collect.mkString(", ")) 

println("Estimated pairwise similarities are: " +  simsEstimate.entries.collect.mkString(", ")) 

Приветствия

+0

Есть ли способ использовать поиск подобия 1 к N? – qmaruf

+0

Приятно добавить ссылку на место, где вы найдете ответы: https://stackoverflow.com/questions/30169841/convert-matrix-to-rowmatrix-in-apache-spark-using-scala –