從零開始學(xué)習(xí)Spark(七)Spark編程進(jìn)階

Spark編程進(jìn)階

這一部分將介紹一些沒有提到的一些Spark的特性,都是非常有用的家妆,內(nèi)容之間關(guān)聯(lián)性不是很強(qiáng)鸵荠。主要包括,共享變量伤极,分區(qū)操作蛹找,調(diào)用腳本以及統(tǒng)計(jì)操作姨伤。

1. 共享變量之累加器

通常在向 Spark 傳遞函數(shù)時(shí),比如使用map()函數(shù)或者用filter()傳條件時(shí)庸疾,可以使用驅(qū) 動(dòng)器程序中定義的變量乍楚,但是集群中運(yùn)行的每個(gè)任務(wù)都會(huì)得到這些變量的一份新的副本, 更新這些副本的值也不會(huì)影響驅(qū)動(dòng)器中的對(duì)應(yīng)變量届慈。

下面這段scala程序讀取文件的同時(shí)統(tǒng)計(jì)了空白行的數(shù)量

val sc = new SparkContext(...)
val file = sc.textFile("file.txt")
val blankLines = sc.accumulator(0) // 創(chuàng)建Accumulator[Int]并初始化為0
val callSigns = file.flatMap(line => {
  if (line == "") {
    blankLines += 1 // 累加器加1
  }
  line.split(" ")
})
callSigns.saveAsTextFile("output.txt")
println("Blank lines: " + blankLines.value)

注意徒溪,工作節(jié)點(diǎn)上的任務(wù)不能訪問累加器的值。我的理解是轉(zhuǎn)化操作都是惰性操作金顿,使用累加器的值存在同步問題臊泌。

2. 共享變量之廣播變量

Spark的第二種共享變量類型是廣播變量,它可以讓程序高效地向所有工作節(jié)點(diǎn)發(fā)送一個(gè) 較大的只讀值揍拆,以供一個(gè)或多個(gè)Spark操作使用

廣播變量為只讀變量渠概,它由運(yùn)行SparkContext的驅(qū)動(dòng)程序創(chuàng)建后發(fā)送給會(huì)參與計(jì)算的節(jié)點(diǎn)。

廣播變量可以被非驅(qū)動(dòng)程序所在的節(jié)點(diǎn)(即工作節(jié)點(diǎn))訪問嫂拴,訪問的方法是用該廣播變量的value方法播揪。

val broadcastAList = sc.broadcast(List("a", "b", "c", "d", "e"))
sc.parallelize(List("1", "2", "3")).map(x => broadcastAList.value ++ x).collect

3. 基于分區(qū)的操作

基于分區(qū)對(duì)數(shù)據(jù)進(jìn)行操作可以讓我們避免為每個(gè)數(shù)據(jù)元素進(jìn)行重復(fù)的配置工作。諸如打開 數(shù)據(jù)庫連接或創(chuàng)建隨機(jī)數(shù)生成器等操作顷牌,都是我們應(yīng)當(dāng)盡量避免為每個(gè)元素都配置一次的 工作剪芍。Spark 提供基于分區(qū)的map和foreach,讓你的部分代碼只對(duì)RDD的每個(gè)分區(qū)運(yùn)行 一次窟蓝,這樣可以幫助降低這些操作的代價(jià)罪裹。

4. 與外部程序間的管道

如果Scala、Java以及Python都不能實(shí)現(xiàn)你需要的功能运挫,那么Spark也為這種情況提供了一種通用機(jī)制状共,可以將數(shù)據(jù)通過管道傳給用其他語言編寫的程序,比如R語言腳本谁帕。

有點(diǎn)類似Hadoop的Streaming

5. 數(shù)值RDD操作

Spark 對(duì)包含數(shù)值數(shù)據(jù)的RDD提供了一些描述性的統(tǒng)計(jì)操作峡继。

之前已經(jīng)使用過的類似rdd.count()的操作,Spark提供了一系列的操作匈挖,如果需要用到多個(gè)操作的話建議先調(diào)用rdd.stats()將這些值通過一次遍歷全部計(jì)算出來碾牌。

Spark包含的統(tǒng)計(jì)值有:

count() RDD 中的元素個(gè)數(shù) 
mean() 元素的平均值 
sum() 總和
max() 最大值
min() 最小值
variance() 元素的方差 
sampleVariance() 從采樣中計(jì)算出的方差 
stdev() 標(biāo)準(zhǔn)差
sampleStdev() 采樣的標(biāo)準(zhǔn)差

下面這個(gè)例子用來篩選掉異常值

val distanceDouble = distance.map(string => string.toDouble)
val stats = distanceDoubles.stats()
val stddev = stats.stdev
val mean = stats.mean
val reasonableDistances = distanceDoubles.filter(x => math.abs(x-mean) < 3 * stddev) println(reasonableDistance.collect().toList)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市儡循,隨后出現(xiàn)的幾起案子舶吗,更是在濱河造成了極大的恐慌,老刑警劉巖择膝,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誓琼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)腹侣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門叔收,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人傲隶,你說我怎么就攤上這事饺律。” “怎么了伦籍?”我有些...
    開封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵蓝晒,是天一觀的道長。 經(jīng)常有香客問我帖鸦,道長芝薇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任作儿,我火速辦了婚禮洛二,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攻锰。我一直安慰自己晾嘶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開白布娶吞。 她就那樣靜靜地躺著垒迂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妒蛇。 梳的紋絲不亂的頭發(fā)上机断,一...
    開封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音绣夺,去河邊找鬼吏奸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛陶耍,可吹牛的內(nèi)容都是我干的奋蔚。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼烈钞,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼泊碑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起毯欣,我...
    開封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤蛾狗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后仪媒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年算吩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了留凭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡偎巢,死狀恐怖蔼夜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情压昼,我是刑警寧澤求冷,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站窍霞,受9級(jí)特大地震影響匠题,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜但金,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一韭山、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冷溃,春花似錦钱磅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凿歼,卻和暖如春褪迟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毅往。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來泰國打工牵咙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人攀唯。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓洁桌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侯嘀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子另凌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容