1. 程式人生 > >08、共享變數(Broadcast Variable和Accumulator)

08、共享變數(Broadcast Variable和Accumulator)

 Spark提供的Broadcast Variable,是只讀的。並且在每個節點上只會有一份副本,而不會為每個task都拷貝一份副本。因此其最大作用,就是減少變數到各個節點的網路傳輸消耗,以及在各個節點上的記憶體消耗。此外,spark自己內部也使用了高效的廣播演算法來減少網路消耗。可以通過呼叫SparkContext的broadcast()方法,來針對某個變數建立廣播變數。然後在運算元的函式內,使用到廣播變數時,每個節點只會拷貝一份副本了。每個節點可以使用廣播變數的value()方法獲取值。記住,廣播變數,是隻讀的。val factor = 3val factorBroadcast = sc.broadcast(factor)val arr = Array(1, 2, 3, 4, 5)val rdd = sc.parallelize(arr)val multipleRdd = rdd.map(num => num * factorBroadcast.value())multipleRdd.foreach(num => println(num))