Spark是基于內(nèi)存的迭代計(jì)算框架,適用于需要多次操作特定數(shù)據(jù)集的應(yīng)用場(chǎng)合。需要反復(fù)操作的次數(shù)越多,所需讀取的數(shù)據(jù)量越大,受益越大,數(shù)據(jù)量小但是計(jì)算密集度較大的場(chǎng)合,受益就相對(duì)較小(大數(shù)據(jù)庫(kù)架構(gòu)中這是是否考慮使用Spark的重要因素)。
1、Spark的核心是什么?
RDD是Spark的基本抽象,是對(duì)分布式內(nèi)存的抽象使用,實(shí)現(xiàn)了以操作本地集合的方式來操作分布式數(shù)據(jù)集的抽象實(shí)現(xiàn)。RDD也是Spark非常核心的東西,它表示已被分區(qū),不可變的并能夠被并行操作的數(shù)據(jù)集合,不同的數(shù)據(jù)集格式對(duì)應(yīng)不同的RDD實(shí)現(xiàn)。
RDD必須是可序列化的。RDD可以cache到內(nèi)存中,每次對(duì)RDD數(shù)據(jù)集的操作之后的結(jié)果,都可以存放到內(nèi)存中,下一個(gè)操作可以直接從內(nèi)存中輸入,省去了MapReduce大量的磁盤IO操作。這對(duì)于迭代運(yùn)算比較常見的機(jī)器學(xué)習(xí)算法, 交互式數(shù)據(jù)挖掘來說,效率提升比較大。
2、Spark的適用場(chǎng)景有哪些?
由于RDD的特性,Spark不適用那種異步細(xì)粒度更新狀態(tài)的應(yīng)用,例如web服務(wù)的存儲(chǔ)或者是增量的web爬蟲和索引。就是對(duì)于那種增量修改的應(yīng)用模型不適合??偟膩碚fSpark的適用面比較廣泛且比較通用。
3、Spark支持的編程語(yǔ)言有哪幾種?
Spark通過與編程語(yǔ)言集成的方式暴露RDD的操作,類似于DryadLINQ和FlumeJava,每個(gè)數(shù)據(jù)集都表示為RDD對(duì)象,對(duì)數(shù)據(jù)集的操作就表示成對(duì)RDD對(duì)象的操作。Spark主要支持的編程語(yǔ)言是Scala、java、python。
Scala
Spark使用Scala開發(fā),默認(rèn)使用Scala作為編程語(yǔ)言。編寫Spark程序比編寫Hadoop MapReduce程序要簡(jiǎn)單的多,SparK提供了Spark-Shell,可以在Spark-Shell測(cè)試程序。
Java
Spark支持Java編程,但對(duì)于使用Java就沒有了Spark-Shell這樣方便的工具,其它與Scala編程是一樣的,因?yàn)槎际荍VM上的語(yǔ)言,Scala與Java可以互操作,Java編程接口其實(shí)就是對(duì)Scala的封裝。
Python
現(xiàn)在Spark也提供了Python編程接口,Spark使用py4j來實(shí)現(xiàn)python與java的互操作,從而實(shí)現(xiàn)使用python編寫Spark程序。Spark也同樣提供了pyspark,一個(gè)Spark的python shell,可以以交互式的方式使用Python編寫Spark程序。
以上就是今天千鋒大數(shù)據(jù)培訓(xùn)老師的總結(jié)分享,學(xué)習(xí)大數(shù)據(jù)開發(fā),可以參考千鋒提供的大數(shù)據(jù)學(xué)習(xí)路線,該學(xué)習(xí)路線提供完整的大數(shù)據(jù)開發(fā)知識(shí)體系,內(nèi)容包含Linux&&Hadoop生態(tài)體系、大數(shù)據(jù)計(jì)算框架體系、云計(jì)算體系、機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)。根據(jù)千鋒提供的大數(shù)據(jù)學(xué)習(xí)路線圖結(jié)合千鋒大數(shù)據(jù)視頻教程,可以讓你對(duì)學(xué)習(xí)大數(shù)據(jù)需要掌握的知識(shí)有個(gè)清晰的了解,并快速入門大數(shù)據(jù)開發(fā)。