Я пытаюсь создать следующую функцию, чтобы добавить two org.apache.spark.ml.linalg.Vector
. или т.е. два разреженных вектора
Этот вектор может выглядеть следующим образом
(28,[1,2,3,4,7,11,12,13,14,15,17,20,22,23,24,25],[0.13028398104008743,0.23648605632753023,0.7094581689825907,0.13028398104008743,0.23648605632753023,0.0,0.14218861229025295,0.3580566057240087,0.14218861229025295,0.13028398104008743,0.26056796208017485,0.0,0.14218861229025295,0.06514199052004371,0.13028398104008743,0.23648605632753023])
Например,
def add_vectors(x: org.apache.spark.ml.linalg.Vector,y:org.apache.spark.ml.linalg.Vector): org.apache.spark.ml.linalg.Vector = {
}
Давайте рассмотрим вариант использования
val x = Vectors.sparse(2, List(0), List(1)) // [1, 0]
val y = Vectors.sparse(2, List(1), List(1)) // [0, 1]
I want to output to be
Vectors.sparse(2, List(0,1), List(1,1))
Вот еще один случай, когда они имеют одинаковые индексы
val x = Vectors.sparse(2, List(1), List(1))
val y = Vectors.sparse(2, List(1), List(1))
Этот вывод должен быть
Vectors.sparse(2, List(1), List(2))
Я понял, что делать это сложнее, чем кажется. Я рассмотрел одно из возможных решений преобразования векторов в ветер, добавления их в ветер и последующего преобразования обратно в вектор. например Добавление двух RDD[mllib.linalg.Vector]. Поэтому я попытался реализовать это.
def add_vectors(x: org.apache.spark.ml.linalg.Vector,y:org.apache.spark.ml.linalg.Vector) ={
val dense_x = x.toDense
val dense_y = y.toDense
val bv1 = new DenseVector(dense_x.toArray)
val bv2 = new DenseVector(dense_y.toArray)
val vectout = Vectors.dense((bv1 + bv2).toArray)
vectout
}
однако это дало мне ошибку в последней строке
val vectout = Vectors.dense((bv1 + bv2).toArray)
Не удается разрешить перегруженный метод "плотный". Мне интересно, почему возникает ошибка и как ее исправить?