成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Apache Spark 的一些淺見。

jsyzchen / 3109人閱讀

摘要:二求文件中包含包租婆的行數(shù)從一個(gè)總計(jì)行的文件中找出所有包含包租婆的行數(shù),我們不用太動(dòng)腦筋就有一個(gè)算法讀一行,判斷這一行有包租婆嗎如果有,全局變量加。在臺(tái)機(jī)器上分別執(zhí)行笨辦法計(jì)算包含包租婆的行數(shù)。

一、搬磚 vs. 分布式計(jì)算

一個(gè)人搬磚很累,幾個(gè)人一起搬就會(huì)輕松很多,也會(huì)快很多:

分布并行計(jì)算和幾個(gè)人一起搬磚的意思是一致的,一個(gè)資源密集型的任務(wù)(搬磚或計(jì)算),需要 一組資源(小伙伴或計(jì)算節(jié)點(diǎn)),并行地完成:

計(jì)算任務(wù) => 搬磚

計(jì)算節(jié)點(diǎn) => 小伙伴

當(dāng)計(jì)算任務(wù)過重時(shí),我們就把計(jì)算任務(wù)拆分,然后放到多個(gè)計(jì)算節(jié)點(diǎn)上同時(shí)執(zhí)行,這就是分布并行計(jì)算。

二、求文件中包含"包租婆"的行數(shù)

從一個(gè)總計(jì)100行的文件中找出所有包含“包租婆”的行數(shù),我們不用太動(dòng)腦筋就有一個(gè)算法:

讀一行,判斷這一行有“包租婆”嗎?如果有,全局變量count加1。

文件到末尾了嗎?如果沒有,跳轉(zhuǎn)到第1步繼續(xù)執(zhí)行。

打印count。

這幾步程序,我打賭在你的計(jì)算機(jī)上可以一眨眼的功夫就執(zhí)行完。但是如果這個(gè)文件有100萬行呢? 如果還用剛才不動(dòng)腦筋的笨算法,可能就不好交差了......

并行分布計(jì)算采用了一個(gè)大智若愚的辦法,通過將笨算法丟給一群機(jī)器同時(shí)去算,實(shí)現(xiàn)規(guī)定時(shí)間內(nèi)規(guī)定 任務(wù)的完成。你要知道,如今流行的Map/Reduce就是這么干的,這聽起來不夠高端,也確實(shí)引起了一些數(shù)據(jù)庫(kù)專 家(聰明人)的非議。不過,不管黑貓白貓,能抓住老鼠的都是好貓。

三、Spark簡(jiǎn)化了分布式計(jì)算的開發(fā)

如果要把剛才的任務(wù)進(jìn)行分布計(jì)算(假設(shè)有10臺(tái)機(jī)器可以用),需要對(duì)原始的笨算法做一些調(diào)整:

把100萬條數(shù)據(jù)分成10份,每份10萬條。

在10臺(tái)機(jī)器上分別執(zhí)行笨辦法計(jì)算包含“包租婆”的行數(shù)。

匯總合并10臺(tái)機(jī)器的計(jì)算結(jié)果,即count,打印出來。

Oh...NO.....太...累...了...

好在有Spark的存在!我們只要把數(shù)據(jù)和計(jì)算程序交給Spark,它會(huì)機(jī)智地進(jìn)行數(shù)據(jù)切分、算法復(fù)制、分布執(zhí)行、結(jié)果合并。

四、Spark的計(jì)算范式:數(shù)據(jù)集上的計(jì)算

Spark用起來的確簡(jiǎn)單,但有一點(diǎn)特別要注意,你得按照Spark的范式寫算法。

Spark是在數(shù)據(jù)集的層次上進(jìn)行分布并行計(jì)算,是的,它只認(rèn)成堆的數(shù)據(jù):

我們提交給Spark的計(jì)算任務(wù),必須滿足兩個(gè)條件:

數(shù)據(jù)是可以分塊的,每塊構(gòu)成一個(gè)集合。
算法只能在集合級(jí)別執(zhí)行操作。
比如,對(duì)于文本文件,在Spark中,一行就是一條記錄,若干條記錄組成一個(gè)集合。我們 原來的算法直接在每一行上進(jìn)行計(jì)算,就不行了。需要先構(gòu)建數(shù)據(jù)集,然后通過數(shù)據(jù)集的操作, 實(shí)現(xiàn)我們的目的。

五、SQL中的數(shù)據(jù)集

如果你熟悉SQL,可以用SQL的思維考慮下什么是集合操作:

UPDATE USER SET GENDER="FEMALE"

上面的SQL語(yǔ)句就是一個(gè)集合操作,對(duì)一個(gè)數(shù)據(jù)集合,執(zhí)行一條UPDATE操作,整個(gè)數(shù)據(jù)集都被修改了。

UPDATE語(yǔ)句有兩個(gè)特點(diǎn),這也是集合操作的要素:

1.對(duì)集合的每個(gè)記錄執(zhí)行相同的操作

UPDATE更新了集合中的所有記錄,這些記錄的 GENDER 字段值都被更新為 FEMALE 。

2.這個(gè)操作的具體行為是用戶指定的

UPDATE通過SET子句,指定更新那些字段,怎么更新。

六、JavaScript中的數(shù)據(jù)集

JavaScript中數(shù)組對(duì)象的map方法也是一種集合操作。map方法將一個(gè)數(shù)組的每一個(gè)成員變換為新的成員, 并返回變換后新的集合。

var a=[1,2,3,4];
a.map(function(d){return d*2;});
console.log(a);

上面的JavaScript代碼對(duì)一個(gè)數(shù)組執(zhí)行map方法,將每一個(gè)成員進(jìn)行倍乘。結(jié)果是獲得一個(gè)新的 數(shù)組,比如在這里,將得到[2,4,6,8]。

這個(gè)例子也說明了集合操作的兩個(gè)要素:

1.對(duì)集合的每個(gè)記錄執(zhí)行相同的操作

在map方法執(zhí)行中,每個(gè)數(shù)組成員都被轉(zhuǎn)換為原始值的2倍。

2.這個(gè)操作的具體行為是用戶指定的

map方法使用一個(gè)匿名函數(shù),指定如何對(duì)每一個(gè)原始數(shù)據(jù)進(jìn)行變換。

七、將算法移植到Spark上

現(xiàn)在我們修改原始的笨算法,使之適用于Spark:

將數(shù)據(jù)載入并構(gòu)造數(shù)據(jù)集
在Spark中,這個(gè)數(shù)據(jù)集被稱為RDD :彈性分布數(shù)據(jù)集。
對(duì)數(shù)據(jù)集進(jìn)行map操作
指定行為:如果一行原始記錄包含“包租婆”,該行記錄映射為新值1,否則映射為新值0 。
對(duì)map后的數(shù)據(jù)集進(jìn)行collect操作,獲得合并的結(jié)果。
上面的map操作,和前面JavaScript數(shù)組的map方法類似,將原始記錄映射為新的記錄,并返回一個(gè)新的RDD。 collect操作提取RDD中的全部數(shù)據(jù)到本地。

魔術(shù)發(fā)生在RDD上。Spark的RDD自動(dòng)進(jìn)行數(shù)據(jù)的切分和結(jié)果的整合。我們假裝不知道就好了, 就像這一切只發(fā)生在本地的一臺(tái)機(jī)器上。

八、Spark操作符

Spark提供了80多種操作符對(duì)集合進(jìn)行操作。我們列舉常用的一些供你建立一點(diǎn)基本概念, 以便了解Spark可以支持什么:

變換

變換操作總是獲得一個(gè)新的RDD:

map(func) : 將原始數(shù)據(jù)集的每一個(gè)記錄使用傳入的函數(shù)func ,映射為一個(gè)新的記錄,并返回新的RDD。

filter(func) : 返回一個(gè)新的RDD,僅包含那些符合條件的記錄,即func返回true 。

flatMap(func) : 和map類似,只是原始記錄的一條可能被映射為新的RDD中的多條。

union(otherDataset) : 合并兩個(gè)RDD,返回一個(gè)新的RDD 。

intersection(otherDataset):返回一個(gè)新的RDD,僅包含兩個(gè)RDD共有的記錄。

動(dòng)作

動(dòng)作操作總是獲得一個(gè)本地?cái)?shù)據(jù),這意味著控制權(quán)回到你的程序了:

reduce(func) : 使用func對(duì)RDD的記錄進(jìn)行聚合。

collect() : 返回RDD中的所有記錄

count() : 返回RDD中的記錄總數(shù)

對(duì)spark中Scala語(yǔ)言快速掃盲、交互分析、RDD動(dòng)作、RDD變換的介紹如下:
http://www.hubwiz.com/course/5449c691e564e50960f1b7a9/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/35731.html

相關(guān)文章

  • 4月15日云棲精選夜讀 | 賈揚(yáng)清:我對(duì)人工智能方向一點(diǎn)淺見

    摘要:點(diǎn)擊訂閱云棲夜讀周刊作為大神,賈揚(yáng)清讓人印象深刻的可能是他寫的框架,那已經(jīng)是六年前的事了。經(jīng)過多年的沉淀,成為阿里新人的他,對(duì)人工智能又有何看法最近,賈揚(yáng)清在阿里內(nèi)部分享了他的思考與洞察,歡迎共同探討交流?!军c(diǎn)擊訂閱云棲夜讀周刊】 作為 AI 大神,賈揚(yáng)清讓人印象深刻的可能是他寫的AI框架Caffe ,那已經(jīng)是六年前的事了。經(jīng)過多年的沉淀,成為阿里新人的他,對(duì)人工智能又有何看法?最近,賈揚(yáng)...

    Meils 評(píng)論0 收藏0
  • Spark SQL學(xué)習(xí)筆記

    摘要:是中處理結(jié)構(gòu)化數(shù)據(jù)的模塊??梢詮暮芏鄶?shù)據(jù)源加載數(shù)據(jù)并構(gòu)造得到,如結(jié)構(gòu)化數(shù)據(jù)文件,中的表,外部數(shù)據(jù)庫(kù),或者已有的。使用反射機(jī)制,推導(dǎo)包含指定類型對(duì)象的。這一功能應(yīng)該優(yōu)先于使用。隨后,將會(huì)掃描必要的列,并自動(dòng)調(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)信息...

    qieangel2013 評(píng)論0 收藏0
  • Leaf in the Wild: Stratio整合Apache和MongoDB為世界上最大銀行

    摘要:以及大數(shù)據(jù)平臺(tái)都已經(jīng)進(jìn)行了集成并且處于企業(yè)就緒狀態(tài)。因此,顧客避免浪費(fèi)時(shí)間在安裝配置及監(jiān)控系統(tǒng)方面。注意防止數(shù)據(jù)頻繁移動(dòng)。 本文源地址:http://www.mongoing.com/blog/post/leaf-in-the-wild-stratio-integrates-apache-spark-and-mongodb-to-unlock-new-customer-insights...

    BDEEFE 評(píng)論0 收藏0
  • Spark 』5. 這些年,你不能錯(cuò)過 spark 學(xué)習(xí)資源

    摘要:原文鏈接這些年,你不能錯(cuò)過的學(xué)習(xí)資源寫在前面本系列是綜合了自己在學(xué)習(xí)過程中的理解記錄對(duì)參考文章中的一些理解個(gè)人實(shí)踐過程中的一些心得而來。 原文鏈接:『 Spark 』5. 這些年,你不能錯(cuò)過的 spark 學(xué)習(xí)資源 寫在前面 本系列是綜合了自己在學(xué)習(xí)spark過程中的理解記錄 + 對(duì)參考文章中的一些理解 + 個(gè)人實(shí)踐spark過程中的一些心得而來。寫這樣一個(gè)系列僅僅是為了梳理個(gè)人學(xué)習(xí)s...

    mist14 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<