Я новичок в искрах и не понимаю, как работает механизм трансляции с искру. У меня есть один файл csv с двумя двойниками, я хочу сделать операцию (вычислить эвклидово расстояние) с первым вектором с остальной частью rdd. Затем итерации с другими векторами. Он существует иначе, чем этот? Возможно, разумно использовать декартовую продукцию ...Как избежать цикла с искрой?
val rdd = sc.parallelize(Array((1,Vectors.dense(1,2)),(2,Vectors.dense(3,4),...)))
val array_vects = rdd.collect
val size = rdd.count
val emptyArray = Array((0,Vectors.dense(0))).tail
var rdd_rez = sc.parallelize(emptyArray)
for(ind <- 0 to size -1) {
val vector = array_vects(ind)._2
val rest = rdd.filter(x => x._1 != ind)
val rdd_dist = rest.map(x => (x._1 , Vectors.sqdist(x._2,vector)))
rdd_rez = rdd_rez ++ rdd_dist
}
Благодарим вас за поддержку.
Оу ... он хочет только первый вектор ... OMG ... редактирование ответа ... –
Нет , «идите с другими векторами». Это после выполнения евклидова расстояния с первым вектором по сравнению со всеми остальными) –
Что для вас значит ... что вы хотите, чтобы евклидово расстояние каждого вектора от каждого другого вектора? –