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