官术网_书友最值得收藏!

1.4 如何選擇Spark編程語言

Spark在誕生之初就提供了多種編程語言接口:Scala、Java、Python、SQL,在后面的版本中又加入了R語言編程接口。對于Spark來說,雖然內(nèi)核由Scala編寫而成,但是編程語言從來就不是它的重點(diǎn),從Spark提供這么多的編程接口來看,Spark鼓勵不同背景的人去使用Spark完成自己的數(shù)據(jù)探索工作。盡管如此,不同編程語言在開發(fā)效率、執(zhí)行效率等方面還是有些不同,本書將目前Spark各種編程語言優(yōu)缺點(diǎn)羅列如表1-1所示。

表1-1 Spark開發(fā)語言對比

Scala作為Spark的開發(fā)語言當(dāng)然得到原生支持,也非常成熟,它簡潔的語法也能顯著提高開發(fā)效率;Java也是Spark原生支持的開發(fā)語言,但是Java語法冗長且不支持函數(shù)式編程(1.8以后支持),導(dǎo)致它的API設(shè)計得比較冗余以及不合理,再加上需要編譯執(zhí)行,Java開發(fā)效率無疑是最低的,但Java程序員基數(shù)特別大,Java API對于這些用戶來說無疑是很友好的;Python與R語言都是解釋型腳本語言,不用編譯直接運(yùn)行,尤其是Python更以簡潔著稱,開發(fā)效率自不必說,此外Python與R語言本身也支持函數(shù)式編程,這兩種語言在開發(fā)Spark作業(yè)時也是非常自然,但由于其執(zhí)行原理是計算任務(wù)在每個節(jié)點(diǎn)安裝的Python或R的環(huán)境中執(zhí)行,結(jié)果通過管道輸出給Spark Worker,因此效率要比Scala與Java低,而且PySpark、SparkR這兩個中間件成熟度有待提高。SQL是Spark原生支持的開發(fā)語言,從各個維度上來說都是最優(yōu)的,因此一般情況下,用Spark SQL解決問題是最優(yōu)選擇。

對于剛剛開始學(xué)習(xí)Spark的用戶,一開始最好選擇一門自己最熟悉的語言,這樣Spark的學(xué)習(xí)曲線比較平緩。如果從零開始,建議在Scala與Python中間選擇,Scala作為Spark的原生開發(fā)語言,如果想要深入了解Spark有必要掌握;Python在開發(fā)速度方面的優(yōu)勢可以賦予開發(fā)人員極強(qiáng)的數(shù)據(jù)工程實(shí)踐能力,加之Python在數(shù)據(jù)科學(xué)領(lǐng)域的廣泛應(yīng)用,可以更好地發(fā)揮Spark在數(shù)據(jù)處理方面的優(yōu)勢。基于以上原因,本書主要的開發(fā)語言為Scala,有些案例與實(shí)戰(zhàn)會用Python實(shí)現(xiàn)。

主站蜘蛛池模板: 扶风县| 虹口区| 鄂托克旗| 蒙城县| 广州市| 小金县| 汉中市| 通辽市| 嘉义县| 铁岭市| 肥城市| 崇左市| 嵩明县| 务川| 中阳县| 根河市| 伊宁县| 盐源县| 马尔康县| 平武县| 高要市| 缙云县| 通辽市| 钟山县| 横峰县| 朝阳县| 綦江县| 集贤县| 杂多县| 新巴尔虎左旗| 汉川市| 本溪市| 荣成市| 通海县| 闽清县| 江安县| 二连浩特市| 昭通市| 雅安市| 庆阳市| 额尔古纳市|