当我们事先不知道他的维度时,如何访问Vector组件

时间:2015-04-18 00:22:18

标签: scala apache-spark

对于二维向量,我使用此代码段,但如果我事先不知道向量的维数,我该如何调整我的代码?

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))  )

感谢您的建议

2 个答案:

答案 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)
            })