首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过删除"for loop“来优化scala-spark代码

通过删除"for loop“来优化scala-spark代码
EN

Stack Overflow用户
提问于 2016-04-27 05:51:50
回答 2查看 527关注 0票数 0

我想优化这段代码( scala spark)以删除for循环。我该怎么做呢?

代码语言:javascript
复制
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)
}
EN

回答 2

Stack Overflow用户

发布于 2017-03-31 02:34:44

不太确定如何并行化依赖于前一个值的集合……我唯一能补充的就是如何根据函数式编程的最佳实践删除循环并使其成为递归函数。

代码语言:javascript
复制
  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)
票数 0
EN

Stack Overflow用户

发布于 2018-05-03 12:56:15

一种可能的解决方案是将for循环转换为map的翻译。您可以尝试以下操作:

val varianceExplained = varExplained.map(elem => (elem, sums+varExplained(elem)))

在这种情况下,您不需要varianceExplained阵列。map操作的结果是获得所需的Array[(Int, Double)]。我在工作中使用了类似的策略来提高代码的效率。此外,请尝试在代码中使用vals而不是vars

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36876436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档