Spark專案包含下列幾項:
Spark核心和彈性分散式資料集(RDDs)
编辑
Spark核心是整個專案的基礎,提供了分散式任務調度,排程和基本的I/O功能。而其基礎的程序抽象則稱為彈性分散式資料集(RDDs),是一個可以并行操作、有容錯機制的資料集合。 RDDs可以透過引用外部存儲系統的資料集建立(例如:共享文件系統、HDFS、HBase或其他 Hadoop 資料格式的資料來源)。或者是通過在現有RDDs的轉換而創建(比如:map、filter、reduce、join等等)。
RDD抽象化是經由一個以Scala、Java、Python的語言集成API所呈現,簡化了編程複雜性,應用程序操縱RDDs的方法類似於操縱本地端的資料集合。
以 RDD 為中心的函數式編程的一個典型示例是以下 Scala 程序,它計算一組文本文件中出現的所有單詞的頻率並打印最常見的單詞。 每個 map、flatMap(map 的變體)和 reduceByKey 都採用匿名函數對單個數據項(或一對項)執行簡單操作,並應用其參數將 RDD 轉換為新的 RDD。[10][11]
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 => -s._2).map(x => (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倍,擴充性甚至比Vowpal Wabbit(英语:Vowpal Wabbit)要好。[12] MLlib可使用許多常見的機器學習和統計演算法,簡化大規模機器學習時間,其中包括:
匯總統計、相關性、分層抽樣、假設檢定、隨機數據生成
分類與回歸:支持向量機、回歸、線性回歸、邏輯斯諦迴歸、決策樹、樸素貝葉斯
協同過濾:ALS
分群:k-平均演算法
維度约减:奇異值分解(SVD),主成分分析(PCA)
特徵提取和轉換:TF-IDF、Word2Vec、StandardScaler
最优化:隨機梯度下降法(SGD)、L-BFGS
GraphX
编辑
GraphX是Spark上的分散式圖形處理框架。它提供了一組API,可用於表達圖表計算並可以模擬Pregel抽象化。GraphX還對這種抽象化提供了優化運行。
GraphX最初為加州大學柏克萊分校AMPLab和Databricks的研究專案,後來捐贈給Spark專案。[13]