text: Apache Spark是一個開源叢集運算框架，最初是由加州大學柏克萊分校AMPLab所開發。相對於Hadoop的MapReduce會在執行完工作後將中介資料存放到磁碟中，Spark使用了記憶體內運算技術，能在資料尚未寫入硬碟時即在記憶體內分析運算。Spark在記憶體內執行程式的運算速度能做到比Hadoop MapReduce的運算速度快上100倍，即便是執行程式於硬碟時，Spark也能快上10倍速度。Spark允許使用者將資料載入至叢集記憶體，並多次對其進行查詢，非常適合用於機器學習演演算法。使用Spark需要搭配叢集管理員和分散式儲存系統。Spark支援獨立模式本地模式，不過通常只用於開發或測試時以本機檔案系統取代分散式儲存系統。在這樣的情況下，Spark僅在一臺機器上使用每個CPU核心執行程式。在2014年有超過465位貢獻者投入Spark開發，讓其成為Apache軟體基金會以及巨量資料眾多開源專案中最為活躍的專案。歷史.Spark在2009年由在加州大學柏克萊分校AMPLab開創，2010年透過BSD授權條款開源釋出。2013年，該專案被捐贈給Apache軟體基金會並切換授權條款至Apache2.0。。2014年2月，Spark成為Apache的頂級專案。2014年11月，Databricks團隊使用Spark 重新整理資料排序世界記錄。專案構成要素.Spark專案包含下列幾項:Spark核心和彈性分散式資料集.Spark核心是整個專案的基礎，提供了分散式任務排程，排程和基本的I／O功能。而其基礎的程式抽象則稱為彈性分散式資料集。RDD抽象化是經由一個以Scala、Java、Python的語言整合API所呈現，簡化了程式設計複雜性，應用程式操縱RDDs的方法類似於操縱本地端的資料集合。以 RDD 為中心的函數語言程式設計的一個典型示例是以下 Scala 程式，它計算一組文字檔案中出現的所有單詞的頻率並列印最常見的單詞。 每個 map、flatMap執行簡單操作，並應用其引數將 RDD 轉換為新的 RDD。val conf = new SparkConf().setAppName("wiki_test")val sc = new SparkContext(conf)val data = sc.textFile("/path/to/somedir")val tokens = data.flatMap(_.split(" "))val wordFreq = tokens.map((_, 1)).reduceByKey(_ + _)wordFreq.sortBy(s =&gt; -s._2).map(x =&gt; (x._2, x._1)).top(10)Spark SQL.Spark SQL在Spark核心上帶出一種名為SchemaRDD的資料抽象化概念，提供結構化和半結構化資料相關的支援。Spark SQL提供了領域特定語言，可使用Scala、Java或Python來操縱SchemaRDDs。它還支援使用使用命令列介面和ODBC／JDBC伺服器操作SQL語言。在Spark 1.3版本，SchemaRDD被重新命名為DataFrame。Spark Streaming.Spark Streaming充分利用Spark核心的快速排程能力來執行串流分析。它擷取小批次的資料並對之執行RDD轉換。這種設計使串流分析可在同一個引擎內使用同一組為批次分析編寫而撰寫的應用程式程式碼。MLlib.MLlib是Spark上分散式機器學習框架。Spark分散式記憶體式的架構比Hadoop磁碟式的Apache Mahout快上10倍，擴充性甚至比要好。 MLlib可使用許多常見的機器學習和統計演演算法，簡化大規模機器學習時間，其中包括：GraphX.GraphX是Spark上的分散式圖形處理框架。它提供了一組API，可用於表達圖表計算並可以模擬Pregel抽象化。GraphX還對這種抽象化提供了最佳化執行。GraphX最初為加州大學柏克萊分校AMPLab和Databricks的研究專案，後來捐贈給Spark專案。
metadata.dataset: erhwenkuo/wikipedia-zhtw
metadata.title: Apache Spark
metadata.url: https://zh.wikipedia.org/wiki?curid=4793730