对于二维向量,我使用此代码段,但如果我事先不知道向量的维数,我该如何调整我的代码?
var vect = Vectors.dense(0,0)
var rdd_vects = sc.parallelize(Array(vect,vect,...))
var sum = rdd_vects.reduce( case (x,y) => Vectors.dense(x(0)+y(0),x(1)+y(1)) )
感谢您的建议
答案 0 :(得分:1)
如果所有向量都具有相同的维度:
val sum = rdd_vects.reduce{ (x, y) =>
Vectors.dense((x.toArray, y.toArray).zipped.map(_+_))
}
答案 1 :(得分:0)
我想我自己找到了答案。 Vector可以使用Vector.dense(Array [Double])创建,因此我在reducer中运行for循环。
var sum = rdd_vect.reduce( (x,y) => {
var tab_vect = Array(0.0).tail
var x_size = x.size
for( ind <- 0 to x_size-1) {
val component_x = x(ind)
val component_y = y(ind)
val component_f = component_x + component_y
tab_vect = tab_vect :+ component_f
}
Vectors.dense(tab_vect)
})