Spark RDD共享变量

Spark RDD共享变量

在Spark中,当任何函数传递给一个转换操作时,它会在远程集群节点上执行。它对函数中使用的所有变量的不同副本进行操作。这些变量被复制到每台机器上,远程机器上对变量的任何更新都不会还原到驱动程序。

广播变量

广播变量支持在每台机器上缓存只读变量,而不是在任务中提供变量的副本。Spark使用广播算法来分发广播变量以减少通信成本。

Spark操作的执行通过几个阶段,每个阶段之间由分布式的”shuffle”操作分隔。Spark会自动广播每个阶段内任务所需的共同数据。以序列化形式缓存广播的数据,在运行每个任务之前反序列化。

要创建广播变量(假设为v),请调用SparkContext.broadcast(v)。让我们通过一个示例来理解。

scala> val v = sc.broadcast(Array(1, 2, 3))
scala> v.value

Spark RDD共享变量

累加器

累加器是用于执行关联和交换操作,如计数器或求和的变量。Spark提供了对数值类型的累加器的支持。然而,我们可以添加对新类型的支持。

要创建一个数值累加器,调用SparkContext.longAccumulator()或SparkContext.doubleAccumulator()以累积长整型或双精度浮点型的值。

scala> val a=sc.longAccumulator("Accumulator")
scala> sc.parallelize(Array(2,5)).foreach(x=>a.add(x))
scala> a.value

Spark RDD共享变量

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程