spark的廣播變數和累加器的用法

2021-08-28 04:02:57 字數 742 閱讀 2721

今天我們主要來說一下spark的廣播變數和累加器的具體使用,先來看一下官網的介紹:

通常,當在遠端集群節點上執行傳遞給spark操作(例如map,reduce)的函式時,它將在函式中使用的所有變數的單獨副本上工作.這些變數將複製到每台計算機,並且遠端計算機上的變數更新不會傳播回驅動程式.支援跨任務的通用,讀寫共享變數效率低下.但是,spark確實為兩種常見的使用模式提供了兩種有限型別的共享變數:廣播變數和累加器.

廣播變數允許程式設計師在每台機器上保留乙個唯讀變數,而不是隨副本一起傳送它的副本.例如,它們可用於以有效的方式為每個節點提供大輸入資料集的副本.spark還嘗試使用有效的廣播演算法來分發廣播變數,以降低通訊成本.

spark動作通過一組階段執行,由分布式「shuffle」操作分隔.spark自動廣播每個階段中任務所需的公共資料.以這種方式廣播的資料以序列化形式快取並在執行每個任務之前反序列化.這意味著顯式建立廣播變數僅在跨多個階段的任務需要相同資料或以反序列化形式快取資料很重要時才有用.

廣播變數是v通過呼叫從變數建立的sparkcontext.broadcast(v).廣播變數是乙個包裝器v,可以通過呼叫該value方法來訪問它的值.

累加器是僅通過關聯和交換操作「新增」的變數,因此可以並行地有效支援。它們可用於實現計數器(如mapreduce)或總和。spark本身支援數值型別的累加器,程式設計師可以新增對新型別的支援。

作為使用者,您可以建立命名或未命名的累加器。如下圖所示,命名累加器(在此例項中counter)將在web ui中顯示

Spark累加器和廣播變數

累加器有些類似redis的計數器,但要比計數器強大,不僅可以用於計數,還可以用來累加求和 累加合併元素等。假設我們有乙個word.txt文字,我們想要統計該文字中單詞 sheep 的行數,我們可以直接讀取文字filter過濾然後計數。sc.textfile word.txt filter conta...

spark的廣播變數和累加器

廣播變數 廣播變數允許開發人員在每個節點快取唯讀的變數,而不是在任務之間傳遞這些變數。例如,使用廣播變數能夠高效地 在集群每個節點建立大資料的副本。同時,spark還使用高效的廣播演算法分發這些變數,從而減少通訊的開銷。spark應用程式作業的執行由一系列排程階段構成,而這些排程階段通過shuffl...

spark中的廣播變數和累加器

目錄 一 前述 二 具體原理 1 廣播變數 2 累加器 spark中因為運算元中的真正邏輯是傳送到executor中去執行的,所以當executor中需要引用外部變數時,需要使用廣播變數。累機器相當於統籌大變數,常用於計數,統計。1 能不能將乙個rdd使用廣播變數廣播出去?不能,因為rdd是不儲存資...