如何总结Scala数组的每个n元素?

时间:2015-10-01 02:03:15

标签: arrays scala sum

在Scala中总结数组的每个n元素的有效方法是什么?例如,如果我的数组如下所示:

val arr = Array(3,1,9,2,5,8,...)

我希望总结这个数组的每3个元素并得到一个新的数组,如下所示:

newArr = Array(13, 15, ...)

如何在Spark Scala中有效地完成此操作?非常感谢你。

2 个答案:

答案 0 :(得分:5)

grouped后跟map应该可以解决问题:

scala> val arr = Array(3,1,9,2,5,8)
arr: Array[Int] = Array(3, 1, 9, 2, 5, 8)

scala> arr.grouped(3).map(_.sum).toArray
res0: Array[Int] = Array(13, 15)

答案 1 :(得分:0)

在调用toIterator之前调用数组上的grouped方法应该会加快速度,例如。

arr.toIterator.grouped(3).map(_.sum).toArray

例如,使用

val xs = Array.range(0, 10000)

10000次迭代

xs.toIterator.grouped(3).map(_.sum).toArray

需要大约16.93秒,而10000次迭代

xs.grouped(3).map(_.sum).toArray

需要大约21.49秒。