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]