spark 很秀,号称比hadoop快很多,虽然是内存运行,但是即使在磁盘上运行,也比MapReduce快不少。
官网上也是一点不低调,有图为证
其架构大致如下
spark sql 操作数据化结构的程序包
spark streaming 对实时数据进行流式计算的组件
MLlib 提供常见的机器学习程序库
GraphX 操作图,进行并行的图计算
spark做计算主要是对RDD进行操作
创建RDD
可以使用两种方式创建RDD:
1.读取一个外部的数据集
2.在驱动器程序里分发驱动器程序中的对象集合(list和set)
操作RDD
1.转化操作
会由一个RDD 生成另一个新的RDD(比如filter过滤单词)
对于转化操作生成的新的RDD,spark会惰性计算这些RDD,只有在行动操作用到这些RDD的时候,才会真正加载到内存中进行计算。(使用惰性求值,就可以把一些集合操作合并到一起来减少来减少计算数据的步骤)
Spark会使用谱系图来记录这些不同RDD的依赖关系。
2.行动操作
会对RDD计算出一个结果(比如 .first 返回第一个元素),并把结果返回到驱动器程序中或者存到外部存储中(如HDFS)
对于以上两种操作,转化操作返回的是RDD,行动操作返回的是其他的数据类型。
注意:每当我们调用一个新的行动操作时,整个RDD都会从头开始计算,为了避免这种低效行为,可以将中间结果持久化。