scala代码随着数组大小的增加而变慢

omjgkv6w  于 2021-05-17  发布在  Spark
关注(0)|答案(0)|浏览(263)

我已经编写了一个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函数或并行编程能力或任何其他技术来加速计算?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题