2016-04-26 55 views
0

我想優化此代碼(scala spark)以刪除for循環。我該怎麼做 ?通過刪除「for循環」來優化scala-spark代碼

var varianceExplained = Array[(Int,Double)](); 
var varExplained = Array[(Double)]();//{This one contains double values assigned before} 
var sums = 0.00 
for(x<-0 to varExplained.length-1) 
{sums =sums+varExplained(x) 
varianceExplained +:= (x,sums) 
} 
+0

'varExplained'是什麼類型? –

+0

添加了解釋。謝謝 –

+0

當你說「通過去除循環優化」時,你有什麼樣的優化?你不能通過'O(N)'中的'varExplained'數組循環來做你正在做的事情(累計和計算)。另外,你爲什麼提到火花?你問這個過程如何通過使用spark來並行化(因此*可能會更快)? – axiom

回答

0

不是真的相信你會如何並行一組是在其前值依賴......只有這樣我可以補充的是如何消除環路,使之遞歸函數按照函數式編程的最佳實踐。

def go(acc: Array[(Int, Double)], iter: Int, sums: Double): Array[(Int, Double)] ={ 
    if (iter == varExplained.length)acc 
    else { 
     go((iter, sums+varExplained(iter)) +: acc, iter+1, sums+varExplained(iter)) 
    } 
    } 
    go(Array[(Int, Double)](), 0, 0)