本文主要是介绍理解Spark-RDD共享变量 --- Shared Variables,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
通常,当在远程集群节点上执行传递给Spark操作(例如map或reduce)的函数时,它将在函数中使用的所有变量的单独副本上工作。
这些变量将复制到每台计算机,并且远程计算机上的变量的更新不会传播回驱动程序。 支持跨任务的通用,读写共享变量效率低下。
但是,Spark确实为两种常见的使用模式提供了两种有限类型的共享变量:广播变量和累加器。
1.广播变量-Broadcast Variables
广播变量允许程序在每台机器上保留一个只读变量,而不是随副本一起发送它的副本。 例如,它们可用于以有效的方式为每个节点提供大输入数据集的副本。
Spark还尝试使用有效的广播算法来分发广播变量,以降低通信成本。
Spark动作通过一组阶段执行,由分布式“shuffle”操作分隔。 Spark自动广播每个阶段中任务所需的公共数据。
以这种方式广播的数据以序列化形式缓存并在运行每个任务之前反序列化。 这意味着显式创建广播变量仅在跨多个阶段的任务需要相同数据或以反序列化形式缓存数据很重要时才有用。
通过调用 SparkContext.broadcast(v)方法从变量 v 创建广播变量。 广播变量是 v 的封装,可以通过调用value方法访问其值。 下面的代码显示了这个:
val broadcastVar = sc.broadcast(Array(1, 2, 3))broadcastVar.value
创建广播变量后,应该在群集上运行的任何函数中使用它而不是原始变量v,这样变量 v 不会再次传送到多个节点。
另外,在广播之后不应
这篇关于理解Spark-RDD共享变量 --- Shared Variables的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!