Я использовал KMeans, чтобы разделить свои элементы на наборы кластеров, а затем внутри каждого кластера я бы хотел вычислить косинусное сходство.
К сожалению, IndexedRowMatrix принимает только RDD, и, насколько мне известно, запустить RDD внутри другого RDD
невозможно.
val df = ...
val kmeans = new KMeans().setK(10).setSeed(1L)
val model: KMeansModel = kmeans.fit(df)
val predictions = model.transform(df)
val clusters = predictions.groupByKey(row => row.getInt(0))
clusters.mapGroups {
case (key, cluster) =>
...
val indexedRowMatrix = new IndexedRowMatrix(....) // How to pass an RDD to build IndexedRowMatrix
indexedRowMatrix.toBlockMatrix().transpose.toIndexedRowMatrix().columnSimilarities()
}
Есть идеи, как вычислить косинусное сходство после группировки по ключу?