摘要:二求文件中包含包租婆的行數(shù)從一個總計行的文件中找出所有包含包租婆的行數(shù),我們不用太動腦筋就有一個算法讀一行,判斷這一行有包租婆嗎如果有,全局變量加。在臺機器上分別執(zhí)行笨辦法計算包含包租婆的行數(shù)。
一、搬磚 vs. 分布式計算
一個人搬磚很累,幾個人一起搬就會輕松很多,也會快很多:
分布并行計算和幾個人一起搬磚的意思是一致的,一個資源密集型的任務(wù)(搬磚或計算),需要 一組資源(小伙伴或計算節(jié)點),并行地完成:
計算任務(wù) => 搬磚
計算節(jié)點 => 小伙伴
當(dāng)計算任務(wù)過重時,我們就把計算任務(wù)拆分,然后放到多個計算節(jié)點上同時執(zhí)行,這就是分布并行計算。
二、求文件中包含"包租婆"的行數(shù)從一個總計100行的文件中找出所有包含“包租婆”的行數(shù),我們不用太動腦筋就有一個算法:
讀一行,判斷這一行有“包租婆”嗎?如果有,全局變量count加1。
文件到末尾了嗎?如果沒有,跳轉(zhuǎn)到第1步繼續(xù)執(zhí)行。
打印count。
這幾步程序,我打賭在你的計算機上可以一眨眼的功夫就執(zhí)行完。但是如果這個文件有100萬行呢? 如果還用剛才不動腦筋的笨算法,可能就不好交差了......
并行分布計算采用了一個大智若愚的辦法,通過將笨算法丟給一群機器同時去算,實現(xiàn)規(guī)定時間內(nèi)規(guī)定 任務(wù)的完成。你要知道,如今流行的Map/Reduce就是這么干的,這聽起來不夠高端,也確實引起了一些數(shù)據(jù)庫專 家(聰明人)的非議。不過,不管黑貓白貓,能抓住老鼠的都是好貓。
三、Spark簡化了分布式計算的開發(fā)如果要把剛才的任務(wù)進(jìn)行分布計算(假設(shè)有10臺機器可以用),需要對原始的笨算法做一些調(diào)整:
把100萬條數(shù)據(jù)分成10份,每份10萬條。
在10臺機器上分別執(zhí)行笨辦法計算包含“包租婆”的行數(shù)。
匯總合并10臺機器的計算結(jié)果,即count,打印出來。
Oh...NO.....太...累...了...
好在有Spark的存在!我們只要把數(shù)據(jù)和計算程序交給Spark,它會機智地進(jìn)行數(shù)據(jù)切分、算法復(fù)制、分布執(zhí)行、結(jié)果合并。
四、Spark的計算范式:數(shù)據(jù)集上的計算Spark用起來的確簡單,但有一點特別要注意,你得按照Spark的范式寫算法。
Spark是在數(shù)據(jù)集的層次上進(jìn)行分布并行計算,是的,它只認(rèn)成堆的數(shù)據(jù):
我們提交給Spark的計算任務(wù),必須滿足兩個條件:
數(shù)據(jù)是可以分塊的,每塊構(gòu)成一個集合。
算法只能在集合級別執(zhí)行操作。
比如,對于文本文件,在Spark中,一行就是一條記錄,若干條記錄組成一個集合。我們 原來的算法直接在每一行上進(jìn)行計算,就不行了。需要先構(gòu)建數(shù)據(jù)集,然后通過數(shù)據(jù)集的操作, 實現(xiàn)我們的目的。
如果你熟悉SQL,可以用SQL的思維考慮下什么是集合操作:
UPDATE USER SET GENDER="FEMALE"
上面的SQL語句就是一個集合操作,對一個數(shù)據(jù)集合,執(zhí)行一條UPDATE操作,整個數(shù)據(jù)集都被修改了。
UPDATE語句有兩個特點,這也是集合操作的要素:
1.對集合的每個記錄執(zhí)行相同的操作
UPDATE更新了集合中的所有記錄,這些記錄的 GENDER 字段值都被更新為 FEMALE 。
2.這個操作的具體行為是用戶指定的
UPDATE通過SET子句,指定更新那些字段,怎么更新。
六、JavaScript中的數(shù)據(jù)集JavaScript中數(shù)組對象的map方法也是一種集合操作。map方法將一個數(shù)組的每一個成員變換為新的成員, 并返回變換后新的集合。
var a=[1,2,3,4]; a.map(function(d){return d*2;}); console.log(a);
上面的JavaScript代碼對一個數(shù)組執(zhí)行map方法,將每一個成員進(jìn)行倍乘。結(jié)果是獲得一個新的 數(shù)組,比如在這里,將得到[2,4,6,8]。
這個例子也說明了集合操作的兩個要素:
1.對集合的每個記錄執(zhí)行相同的操作
在map方法執(zhí)行中,每個數(shù)組成員都被轉(zhuǎn)換為原始值的2倍。
2.這個操作的具體行為是用戶指定的
map方法使用一個匿名函數(shù),指定如何對每一個原始數(shù)據(jù)進(jìn)行變換。
七、將算法移植到Spark上現(xiàn)在我們修改原始的笨算法,使之適用于Spark:
將數(shù)據(jù)載入并構(gòu)造數(shù)據(jù)集
在Spark中,這個數(shù)據(jù)集被稱為RDD :彈性分布數(shù)據(jù)集。
對數(shù)據(jù)集進(jìn)行map操作
指定行為:如果一行原始記錄包含“包租婆”,該行記錄映射為新值1,否則映射為新值0 。
對map后的數(shù)據(jù)集進(jìn)行collect操作,獲得合并的結(jié)果。
上面的map操作,和前面JavaScript數(shù)組的map方法類似,將原始記錄映射為新的記錄,并返回一個新的RDD。 collect操作提取RDD中的全部數(shù)據(jù)到本地。
魔術(shù)發(fā)生在RDD上。Spark的RDD自動進(jìn)行數(shù)據(jù)的切分和結(jié)果的整合。我們假裝不知道就好了, 就像這一切只發(fā)生在本地的一臺機器上。
八、Spark操作符Spark提供了80多種操作符對集合進(jìn)行操作。我們列舉常用的一些供你建立一點基本概念, 以便了解Spark可以支持什么:
變換
變換操作總是獲得一個新的RDD:
map(func) : 將原始數(shù)據(jù)集的每一個記錄使用傳入的函數(shù)func ,映射為一個新的記錄,并返回新的RDD。
filter(func) : 返回一個新的RDD,僅包含那些符合條件的記錄,即func返回true 。
flatMap(func) : 和map類似,只是原始記錄的一條可能被映射為新的RDD中的多條。
union(otherDataset) : 合并兩個RDD,返回一個新的RDD 。
intersection(otherDataset):返回一個新的RDD,僅包含兩個RDD共有的記錄。
動作
動作操作總是獲得一個本地數(shù)據(jù),這意味著控制權(quán)回到你的程序了:
reduce(func) : 使用func對RDD的記錄進(jìn)行聚合。
collect() : 返回RDD中的所有記錄
count() : 返回RDD中的記錄總數(shù)
對spark中Scala語言快速掃盲、交互分析、RDD動作、RDD變換的介紹如下:
http://www.hubwiz.com/course/5449c691e564e50960f1b7a9/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/35731.html
摘要:點擊訂閱云棲夜讀周刊作為大神,賈揚清讓人印象深刻的可能是他寫的框架,那已經(jīng)是六年前的事了。經(jīng)過多年的沉淀,成為阿里新人的他,對人工智能又有何看法最近,賈揚清在阿里內(nèi)部分享了他的思考與洞察,歡迎共同探討交流?!军c擊訂閱云棲夜讀周刊】 作為 AI 大神,賈揚清讓人印象深刻的可能是他寫的AI框架Caffe ,那已經(jīng)是六年前的事了。經(jīng)過多年的沉淀,成為阿里新人的他,對人工智能又有何看法?最近,賈揚...
摘要:是中處理結(jié)構(gòu)化數(shù)據(jù)的模塊??梢詮暮芏鄶?shù)據(jù)源加載數(shù)據(jù)并構(gòu)造得到,如結(jié)構(gòu)化數(shù)據(jù)文件,中的表,外部數(shù)據(jù)庫,或者已有的。使用反射機制,推導(dǎo)包含指定類型對象的。這一功能應(yīng)該優(yōu)先于使用。隨后,將會掃描必要的列,并自動調(diào)整壓縮比例,以減少內(nèi)存占用和壓力。 Spark SQL是Spark中處理結(jié)構(gòu)化數(shù)據(jù)的模塊。與基礎(chǔ)的Spark RDD API不同,Spark SQL的接口提供了更多關(guān)于數(shù)據(jù)的結(jié)構(gòu)信息...
摘要:以及大數(shù)據(jù)平臺都已經(jīng)進(jìn)行了集成并且處于企業(yè)就緒狀態(tài)。因此,顧客避免浪費時間在安裝配置及監(jiān)控系統(tǒng)方面。注意防止數(shù)據(jù)頻繁移動。 本文源地址:http://www.mongoing.com/blog/post/leaf-in-the-wild-stratio-integrates-apache-spark-and-mongodb-to-unlock-new-customer-insights...
摘要:原文鏈接這些年,你不能錯過的學(xué)習(xí)資源寫在前面本系列是綜合了自己在學(xué)習(xí)過程中的理解記錄對參考文章中的一些理解個人實踐過程中的一些心得而來。 原文鏈接:『 Spark 』5. 這些年,你不能錯過的 spark 學(xué)習(xí)資源 寫在前面 本系列是綜合了自己在學(xué)習(xí)spark過程中的理解記錄 + 對參考文章中的一些理解 + 個人實踐spark過程中的一些心得而來。寫這樣一個系列僅僅是為了梳理個人學(xué)習(xí)s...
閱讀 2884·2023-04-26 01:47
閱讀 3656·2023-04-25 23:45
閱讀 2562·2021-10-13 09:39
閱讀 661·2021-10-09 09:44
閱讀 1878·2021-09-22 15:59
閱讀 2893·2021-09-13 10:33
閱讀 1844·2021-09-03 10:30
閱讀 703·2019-08-30 15:53