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