Scala語言的主要應(yīng)用領(lǐng)域與作用?
Scala語言的主要應(yīng)用領(lǐng)域與作用?
Scala的特性1.面向?qū)ο筇匦許cala是一種純面向?qū)ο蟮恼Z言,每一個(gè)值都是對(duì)象。對(duì)象的數(shù)據(jù)類型以及行為由類和特征(Trait)描述。
類抽象機(jī)制的擴(kuò)展有兩種途徑。
一種途徑是子類繼承,另一種途徑是靈活的混入(Mixin)機(jī)制。這兩種途徑能避免多重繼承的種種問題。2.函數(shù)式編程Scala也是一種函數(shù)式語言,其函數(shù)也能當(dāng)成值來使用。Scala提供了輕量級(jí)的語法用以定義匿名函數(shù),支持高階函數(shù),允許嵌套多層函數(shù),并支持柯里化。
Scala的CaseClass及其內(nèi)置的模式匹配相當(dāng)于函數(shù)式編程語言中常用的代數(shù)類型(AlgebraicType)。更進(jìn)一步,程序員可以利用Scala的模式匹配,編寫類似正則表達(dá)式的代碼處理XML數(shù)據(jù)。在這些情形中,順序容器的推導(dǎo)式(comprehension)功能對(duì)編寫公式化查詢非常有用。
由于JVM不支持尾部遞歸,Scala也不能完全支持尾部遞歸優(yōu)化。不過,在簡(jiǎn)單的情況下,Scala編譯器可以把尾部遞歸優(yōu)化成循環(huán)。4.靜態(tài)類型Scala是具備類型系統(tǒng),通過編譯時(shí)的檢查,保證代碼的安全性和一致性。
類型系統(tǒng)具體支持以下特性:泛型類,型變注釋(VarianceAnnotation),類型繼承結(jié)構(gòu)的上限和下限,把類別和抽象類型作為對(duì)象成員,復(fù)合類型,引用自己時(shí)顯式指定類型,視圖,多態(tài)方法。5.擴(kuò)展性Scala的設(shè)計(jì)承認(rèn)一個(gè)事實(shí),即在實(shí)踐中,某個(gè)領(lǐng)域特定的應(yīng)用程序開發(fā)往往需要特定于該領(lǐng)域的語言擴(kuò)展。Scala提供了許多獨(dú)特的語言機(jī)制,可以以庫的形式輕易無縫添加新的語言結(jié)構(gòu):任何方法可用作前綴或后綴操作符,可以根據(jù)預(yù)期類型自動(dòng)構(gòu)造閉包。
聯(lián)合使用以上兩個(gè)特性,使你可以定義新的語句而無須擴(kuò)展語法也無須使用宏之類的元編程特性。5.使用Scala的框架Lift是一個(gè)開源的Web應(yīng)用框架,旨在提供類似RubyonRails的東西。因?yàn)長(zhǎng)ift使用了Scala,所以Lift應(yīng)用程序可以使用所有的Java庫和Web容器。scala語言主要應(yīng)用領(lǐng)域cala運(yùn)行于JVM之上,并且它可以訪問任何的java類庫并且與java框架進(jìn)行互操作,scala也大量重用了java類型和類庫。
大數(shù)據(jù)的開發(fā)語言是Scala的原因:1:大數(shù)據(jù)的本身是計(jì)算數(shù)據(jù),而Scala即有面向?qū)ο蠼M織項(xiàng)目工程的能力,又有計(jì)算數(shù)據(jù)的功能。2:現(xiàn)在大數(shù)據(jù)事實(shí)上的計(jì)算標(biāo)準(zhǔn)框架Spark,它是用Scala開發(fā)的,因?yàn)橛?jì)算數(shù)據(jù),Scala它是函數(shù)式編程,它實(shí)現(xiàn)算法非常簡(jiǎn)潔優(yōu)雅。例:kafka,它是一個(gè)消息中間件,如果外部數(shù)據(jù)要流進(jìn)大數(shù)據(jù)中心,我們一般都要用kafka作適配器,那如果大數(shù)據(jù)中心的數(shù)據(jù)流到外部,也是用kafka(如Spark計(jì)算的數(shù)據(jù)要交給HBASE或MySql,期間我們都會(huì)用kafka),很多的大數(shù)據(jù)組件都是用的Scala編寫的,所以,如果你想成為一個(gè)較高級(jí)的大數(shù)據(jù)開發(fā)高手,你一定要掌握Scala。
Scala在大數(shù)據(jù)處理方面有何優(yōu)勢(shì)?
首先,Scala不把程序員當(dāng)傻子。當(dāng)馬丁?奧德斯基宣布Scala 2.12(http://www.scala-lang.org/news/roadmap-next)將要簡(jiǎn)化語法,推出Scala\”Don Giovanni\”項(xiàng)目的時(shí)候,在視頻中說的很清楚:“Scala現(xiàn)在是為聰明人創(chuàng)造的,以后也是為聰明人服務(wù)的。百科
”所以不同于Python讓程序員用一種方法做所有事情,Scala提供一整套工具,讓程序員自由選擇,無論是mutable數(shù)據(jù)結(jié)構(gòu),immutable數(shù)據(jù)結(jié)構(gòu),并行(parallel)數(shù)據(jù)結(jié)構(gòu)。
然后在這些選擇中,Scala再針對(duì)他們進(jìn)行算法層面的特殊優(yōu)化。Scala相信程序員的聰明才智,讓程序員自行選擇合適的結(jié)構(gòu),以針對(duì)變化萬千的任務(wù)需求,這點(diǎn)是Scala做得極好的地方。
為什么選擇Scala,它在大數(shù)據(jù)處理方面有何優(yōu)勢(shì)
大數(shù)據(jù)(big data),是指無法在可承受的時(shí)間范圍內(nèi)用常規(guī)軟件工具進(jìn)行捕捉、管理和處理的數(shù)據(jù)**。有人把數(shù)據(jù)比喻為蘊(yùn) 藏能量的煤礦。
煤炭按照性質(zhì)有焦煤、無煙煤、肥煤、貧煤等分類,而露天煤礦、深山煤礦的挖掘成本又不一樣。
與此類似,大數(shù)據(jù)并不在“大”,而在于“有用”。價(jià)值含量、挖掘成本比數(shù)量更為重要。對(duì)于很多行業(yè)而言,如何利用這些大規(guī)模數(shù)據(jù)是成為贏得競(jìng)爭(zhēng)的關(guān)鍵。大數(shù)據(jù)的價(jià)值體現(xiàn)在以下幾個(gè)方面:1)對(duì)大量消費(fèi)者提**品或服務(wù)的企業(yè)可以利用大數(shù)據(jù)進(jìn)行精準(zhǔn)營銷;2) 做小而美模式的中長(zhǎng)尾企業(yè)可以利用大數(shù)據(jù)做服務(wù)轉(zhuǎn)型;3) 面臨互聯(lián)網(wǎng)壓力之下必須轉(zhuǎn)型的傳統(tǒng)企業(yè)需要與時(shí)俱進(jìn)充分利用大數(shù)據(jù)的價(jià)值。
大數(shù)據(jù)為什么要選擇Spark
Spark是一個(gè)基于內(nèi)存計(jì)算的開源集群計(jì)算系統(tǒng),目的是更快速的進(jìn)行數(shù)據(jù)分析。Spark由加州伯克利大學(xué)AMP實(shí)驗(yàn)室Matei為主的小團(tuán)隊(duì)使用Scala開發(fā)開發(fā),其核心部分的代碼只有63個(gè)Scala文件,非常輕量級(jí)。
Spark 提供了與 Hadoop 相似的開源集群計(jì)算環(huán)境,但基于內(nèi)存和迭代優(yōu)化的設(shè)計(jì),Spark 在某些工作負(fù)載表現(xiàn)更**。
大數(shù)據(jù)處理為何選擇spark?
大數(shù)據(jù)處理為何選擇Spark,而不是Hadoop? 一、基礎(chǔ)知識(shí) 1、Spark Spark是一個(gè)用來實(shí)現(xiàn)快速而通用的集群計(jì)算的平臺(tái)。 在速度方面,Spark擴(kuò)展了廣泛使用的MapReduce計(jì)算模型,而且高效地支持更多計(jì)算模式,包括交互式查詢和流處理。
Spark項(xiàng)目包含多個(gè)緊密集成的組件。
Spark的核心是一個(gè)對(duì)由很多計(jì)算任務(wù)組成的、運(yùn)行在多個(gè)工作機(jī)器或者是一個(gè)計(jì)算集群上的應(yīng)用進(jìn)行調(diào)度、分發(fā)以及監(jiān)控的計(jì)算引擎。2、Hadoop Hadoop是一個(gè)由Apache基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。 用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序。充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。
Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲(chǔ),則MapReduce為海量的數(shù)據(jù)提供了計(jì)算。 很多初學(xué)者,對(duì)大數(shù)據(jù)的概念都是模糊不清的,大數(shù)據(jù)是什么,能做什么,學(xué)的時(shí)候,該按照什么線路去學(xué)習(xí),學(xué)完往哪方面發(fā)展,想深入了解,想學(xué)習(xí)的同學(xué)歡迎加入大數(shù)據(jù)學(xué)習(xí)**群:740041381,有大量干貨(零基礎(chǔ)以及進(jìn)階的經(jīng)典實(shí)戰(zhàn))分享給大家,并且有清華大學(xué)畢業(yè)的資深大數(shù)據(jù)講師給大家免費(fèi)授課,給大家分享目前國內(nèi)最完整的大數(shù)據(jù)高端實(shí)戰(zhàn)實(shí)用學(xué)習(xí)流程體系。
二、大數(shù)據(jù)處理選擇 Spark和Hadoop都可以進(jìn)行大數(shù)據(jù)處理,那如何選擇處理平臺(tái)呢? 1.處理速度和性能 Spark擴(kuò)展了廣泛使用的MapReduce計(jì)算模型,支持循環(huán)數(shù)據(jù)流和內(nèi)存計(jì)算。 Hadoop進(jìn)行計(jì)算時(shí),需要從磁盤讀或者寫數(shù)據(jù),同時(shí)整個(gè)計(jì)算模型需要**傳輸,導(dǎo)致MapReduce具有高延遲的弱點(diǎn)。 據(jù)統(tǒng)計(jì),基于Spark內(nèi)存的計(jì)算速度比Hadoop MapReduce快100倍以上,基于磁盤的計(jì)算速度也要快10倍以上。
2.開發(fā)難易度 Spark提供多語言(包括Scala、Java、Python)API,能夠快速實(shí)現(xiàn)應(yīng)用,相比MapReduce更簡(jiǎn)潔的代碼,安裝部署也無需復(fù)雜配置。使用API可以輕松地構(gòu)建分布式應(yīng)用,同時(shí)也可以使用Scala和Python腳本進(jìn)行交互式編程。