Spark共享变量-Broadcast广播变量介绍及scala实现

  通常情况下,当1个function传递到1个spark operation(例如:map、reduce)时,这个function是在远程的集群node上被执行的。这些变量会被复制到每一台机器,在远程机器上不会更新这些变量,然后又传送回driver program。跨tasks共享读写变量的支持,通常是低效率的。然而,spark提供了2种通用的共享变量模式:广播变量和累加器。

  广播变量

  广播变量允许编程人员在每台机器上保持1个只读的缓存变量,而不是传送变量的副本给tasks。
Spark actions通过步骤的集合进行执行,这个集合被分布式的“shuffle” operations分开来执行。在每个步骤中,Spark自动广播tasks所需的通用数据。这意味着,显式地创建广播变量,仅在当tasks跨多个步骤且需要同样的数据或者使用反序列化的缓存数据时显得非常重要。
  实例:

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)

  广播变量创建后,它可以运行在集群中的任何function上,而不需要多次传递给集群节点。另外需要记住,不应该修改广播变量,这样才能确保每个节点获取到的值都是一致的。

你可能感兴趣的:(Scala,Spark)