共享变量之累加器
当一个传递给Spark操作的函数在远程节点上运行时,Spark实际上操作的是这个函数所用变量的独立副本。这些变量被复制到每台机器上,并且这些变量在远程机器上的所有更新都不会传递回驱动程序。如果我们需要获取更新后的数据需要用到共享变量。
spark中有两种共享变量,累加器和广播变量
累加器用来对信息进行聚合,将工作节点的值聚合到驱动器
为什么需要累加器
先来个简单地示例,在不考虑分区的情况的情况下(只有一个分区),来进行数值的求和
1 | val rdd = sc.makeRDD(List(1, 2, 3, 4)) |
前面的计算一直都正常,为什么最后会是0?