我已经编写了一个scalaspark应用程序,它是迭代算法的实现。在数组的每次迭代中都必须执行元素操作。最初,所有收藏的规模都是1000个。对于1000大小的数组,代码运行良好,速度更快。现在数组的大小是100万,而这段代码(应用程序的一部分)花费的时间太长,降低了整个应用程序的速度。此代码在spark rdd的mappartitionwithindex中使用。这是密码。
def ESt(arr: Array[Double], arr1: Array[Double], frq: Double): Array[Double] = {
val newArr = new Array[Double](arr.length)
var i = 0
while (i < arr.length) {
newArr(i) = (arr(i) - arr1(i)) * frq
i += 1
}
newArr
}
def ES(arr: Array[Double], arr1: Array[Double], arr2: Array[Double]): Array[Double] = {
val newArr =new Array[Double](arr.length)
var i = 0
while (i < arr.length) {
newArr(i) = arr(i) + arr1(i) + arr2(i)
i += 1
}
newArr
}
下面是使用上述两个函数来创建一个数组。
val dim = 1000000 // one million
val number : Double = math.random
val xr1 : Array[Double] = Array of size dim
val xr2 : Array[Double] = Array of size dim
val xbest : Array[Double] = Array of size dim
val randomArray : Array[Double] = Array.fill(dim)(math.random)
var result : Array[Double] = ES(randomArray, ESt(xbest, randomArray, number), ESt(xr1, xr2, number))
我在集群中有很多核心,在那里我执行这些代码。如何使用scala函数或并行编程能力或任何其他技术来加速计算?
暂无答案!
目前还没有任何答案,快来回答吧!