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