在Spark中,當任何函數傳遞給轉換操作時,它將在遠程集群節點上執行。它適用於函數中使用的所有變數的不同副本。這些變數將複製到每臺電腦,並且遠程電腦上的變數更新不會恢復到驅動程式。
廣播變數
廣播變數支持在每臺機器上緩存的只讀變數,而不是提供任務的副本。Spark使用廣播演算法來分發廣播變數以降低通信成本。
spark動作的執行經過幾個階段,由分佈式“shuffle”操作分開。Spark自動廣播每個階段中任務所需的公共數據。以這種方式廣播的數據以序列化形式緩存並在運行每個任務之前反序列化。
要創建廣播變數(比方說,v
),請調用SparkContext.broadcast(v)
。讓我們通過一個例子來理解。
scala> val a=sc.longAccumulator("Accumulator")
scala> sc.parallelize(Array(2,5)).foreach(x=>a.add(x))
scala> a.value
累加器
累加器是用於執行關聯和交換操作(例如計數器或總和)的變數。Spark為數字類型的累加器提供支持。但是,可以添加對新類型的支持。
要創建數字累加器,請調用SparkContext.longAccumulator()
或SparkContext.doubleAccumulator()
以累積Long
或Double
類型的值。
示例
scala> val a=sc.longAccumulator("Accumulator")
scala> sc.parallelize(Array(2,5)).foreach(x=>a.add(x))
scala> a.value
上一篇:
RDD持久化
下一篇:
Spark Map函數