廣播變量 ? 采用高效,分發(fā)大值
累加器 ? 用于聚集特定集合的信息
廣播變量允許程序員保持每臺機器上一個只讀變量緩存,而不是運輸它的一個副本任務。它們可用于,例如,給每一個節(jié)點,一個大的輸入數(shù)據(jù)集的副本,以有效的方式。Spark 也嘗試分發(fā)廣播變量來使用高效的廣播算法來降低通信成本。
Spark 操作通過一組階段執(zhí)行,通過分布式“洗牌”作業(yè)分開。Spark 會自動廣播各階段任務所需的通用數(shù)據(jù)。
廣播數(shù)據(jù)緩存到序列化的形式,在運行每個任務之前,反序列化。這意味著顯式地創(chuàng)建廣播變量,當僅是在多個階段的任務需要相同的數(shù)據(jù)或在反序列化形式緩存數(shù)據(jù)時非常重要的。
廣播變量從一個變量v通過調用 SparkContext.broadcast(v)來創(chuàng)建。廣播變量是圍繞 v 封裝,其值可以通過調用值的方法來訪問。下面給出的代碼顯示了這一點 -
scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
輸出 ?
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)
創(chuàng)建廣播變量之后,它應該被用來代替任何函數(shù)的值 v 的集群上運行, v 不運到節(jié)點不止一次。此外,對象 v 不應在它的廣播后修飾,以確保所有節(jié)點獲得廣播變量的相同的值。
蓄電池僅是“補充”到通過關聯(lián)操作變量,因此可以,可以并行有效的支持。它們可以被用來實現(xiàn)計數(shù)器(如在MapReduce)或求和。Spark原生支持累加器的數(shù)字類型,程序員可以添加支持新類型。如果累加器使用自定義的一個名稱創(chuàng)建,它將顯示在 Spark 的 UI 中。這對于了解運行階段和進度很有用(注 - 這還不支持在Python)。
累加器從初始值v的值是通過調用 SparkContext.accumulator(v) 創(chuàng)建. 在集群上運行任務可以使用 add 方法或 += 運算符(在 Scala 和Python)來添加它。 然而無法讀取它的值。只有驅動程序可以讀取累加器的值,使用 value 方法。
下面給出的代碼顯示一個累加器,用來相加數(shù)組的元素 ?
scala> val accum = sc.accumulator(0) scala> sc.parallelize(Array(1,2,3,4)).foreach(x => accum += x)
如果想看到的上面的代碼的輸出,可以使用下面的命令 ?
scala> accum.value
res2: Int = 10
允許使用預定義的API方法之一做不同數(shù)字數(shù)據(jù)的操作。 Spark 數(shù)字運算是與流傳輸算法,允許構建模型,一次一個元素實現(xiàn)。
S.No | 方法 & 含義 |
---|---|
1 |
count()
在RDD元素的數(shù)量
|
2 |
Mean()
在RDD元素的平均值
|
3 |
Sum()
在RDD中元素的總和
|
4 |
Max()
在RDD中所有元素的最大值
|
5 |
Min() 在RDD中所有元素的最小值 |
6 |
Variance()
元素的差異
|
7 |
Stdev()
元素的標準差
|