spark的广播变量和累加器

广播变量:

     广播变量允许开发人员在每个节点缓存只读的变量,而不是在任务之间传递这些变量。例如,使用广播变量能够高效地

在集群每个节点创建大数据的副本。同时,Spark还使用高效的广播算法分发这些变量,从而减少通信的开销。

    spark应用程序作业的执行由一系列调度阶段构成,而这些调度阶段通过Shuffle进行分隔。Spark能够在每个调度阶段自动

广播任务所需通用的数据,这些数据在广播时需要进行序列化缓存,并在任务运行前需进行反序列化。这就意味着当多个调

度阶段的任务需要相同的数据,显示地创建广播变量才用。

  可以通过调用SparkContext.broadcast(v)创建一个广播变量v,该广播变量封装在v变量中,可使用获取该变量value的方法进行访问。代码如下所示:

 

 

累加器:

     累加器是Spark中仅有通过关联操作进行累加的变量,因此能够有效地支持并行计算,它们能够用于计数和求和。Spark原生支持数值类型的累加器,不过开发人员能够定义新的类型。如果在创建累加器时指定了名称,可以通过Spark的UI监控界面中进行查看,这种方式能够帮助理解作业所构成的调度阶段执行过程。

     通过调用SparkContext.accumulator(v)方法初始化累加器变量v,在集群中的任务能够使用加法或者"+="操作符进行累加操作(scala和python中)。然而,它们不能在应用程序中读取这些值,只能由Driver程序通过读方法获取这些累加器的值。

spark的广播变量和累加器_第1张图片

 

你可能感兴趣的:(大数据)