a. 由於MapReduce的shuffle過程需寫磁盤,比較影響性能;而Spark利用RDD技術,計算在內存中進行.
b. MapReduce計算框架(API)比較局限, 而Spark則是具備靈活性的並行計算框架.
c. 再說說Spark API方面- Scala: Scalable Language, 據說是進行並行計算的最好的語言. 與Java相比,極大的減少代碼量.
From http://coderzhang.com/%e5%85%b3%e4%ba%8e%e7%bc%96%e7%a8%8b%e8%af%ad%e8%a8%80%e7%9a%84%e4%b8%80%e7%82%b9%e6%80%9d%e8%80%83/
scala則是為了適應java程序員的需求,做了很多的變通,當然也是為了拉攏java程序員。
scala的代碼寫出來可以咋一看跟java代碼一樣,有很多語法糖來簡化java代碼的書寫復雜度,也很方便的支持了不可變變量。然后就宣稱函數式,開發效率高,支持高並發編程。不過我覺得使他受歡迎的並不是這三點,而是可以使java程序員快速上手,已寫java的方式寫scala。這才是他逐漸流行的關鍵,寫scala對java程序員來說是一件很cool的事情,而且也很容易上手,何樂而不為呢。
再說說流行的java,java應該是在各種語言里比較接近自然語言的一種,這也應該是他流行已久的一個重要原因。自然語言的一個最大的弊端就是描述事情的復雜性,到java就是書寫代碼的復雜性。就像法律文書什么的,說一個事情總是會有很多上下文,使用最沒有歧義的自然語言說清楚一件沒有歧義的事總是困難的。java也面臨同樣的問題。
scala想通過語法糖解決這個問題,就像是用河南話表達上海話的意思,字雖然少了,畢竟只是換一種說法,無法解決自然語言的問題。
DataFrame
就易用性而言,對比傳統的MapReduce API,說Spark的RDD API有了數量級的飛躍並不為過。然而,對於沒有MapReduce和函數式編程經驗的新手來說,RDD API仍然存在着一定的門檻。另一方面,數據科學家們所熟悉的R、Pandas等傳統數據框架雖然提供了直觀的API,卻局限於單機處理,無法勝任大數據場景。為了解決這一矛盾,Spark SQL 1.3.0在原有SchemaRDD的基礎上提供了與R和Pandas風格類似的DataFrame API。新的DataFrame AP不僅可以大幅度降低普通開發者的學習門檻,同時還支持Scala、Java與Python三種語言。更重要的是,由於脫胎自SchemaRDD,DataFrame天然適用於分布式大數據場景。
DataFrame是什么?
在Spark中,DataFrame是一種以RDD為基礎的分布式數據集,類似於傳統數據庫中的二維表格。DataFrame與RDD的主要區別在於,前者帶有schema元信息,即DataFrame所表示的二維表數據集的每一列都帶有名稱和類型。這使得Spark SQL得以洞察更多的結構信息,從而對藏於DataFrame背后的數據源以及作用於DataFrame之上的變換進行了針對性的優化,最終達到大幅提升運行時效率的目標。反觀RDD,由於無從得知所存數據元素的具體內部結構,Spark Core只能在stage層面進行簡單、通用的流水線優化。

