广播变量

广播变量(broadcast variables)允许程序开发人员保持一个缓存在每台机器上的只读变量,而不是随着任务分发它的一个副本。例如,他们能够被用于,以一个有效的方式,给予每个节点一个大型输入数据集的一个副本。Spark也尝试试使用有效地广播算法,减少通信消耗,来分发广播变量。

通过一个由分布式的“混洗”操作分隔的阶段集合,Spark行动被执行。Spark自动地广播在每个阶段任务需要的公共数据。数据广播这个方式是,以序列化格式缓存,然后在运行每个任务前反序列化。这就意味着,显示的创建广播变量只是当任务跨越多个阶段,这些阶段需要相同的数据时,或者当以反序列化格式缓存数据是重要的时候,它才是有用的。

通过调用SparkContext.broadcast(v),把变量v创建为广播变量。广播变量把v包装了,它的值可以通过调用value方法来访问。如以下代码:

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)

scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)

广播变量被创建之后,它应该被用来代替在集群上任意函数里v的值,因此,v不是分发到节点多次。另外,在对象v被广播之后,这个对象不应该被修改,这是为了确保所有的节点能得到相同的广播变量的值(例如,如果随后变量被分发到另一个新的节点)。

results matching ""

    No results matching ""