在Scala中总结数组的每个n元素的有效方法是什么?例如,如果我的数组如下所示:
val arr = Array(3,1,9,2,5,8,...)
我希望总结这个数组的每3个元素并得到一个新的数组,如下所示:
newArr = Array(13, 15, ...)
如何在Spark Scala中有效地完成此操作?非常感谢你。
答案 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秒。