使用foreach时,一定要注意是否为RDD,是RDD和Array会有很大的区别。具体细节请看以下代码。

    val dataRDD = sc.parallelize(1 to 16,4)
    var sum1 = 0
    var sum2 = 0

    dataRDD.foreach { case v =>
      sum1 += v
    }

    dataRDD.collect.foreach { case v =>
      sum2 += v
    }

    println(sum1)
    println(sum2)


最后输出结果,sum1为0,sum2为136。


这是最近自己写更新参数的算法时出现的问题,结果参数一直不更新,排查花了不少时间,特定记录,希望大家不要碰到这种问题。