我们都知道spark的编程是非常丰富的,这都要归功于它丰富的算子,再加上scala面向函数式编程的特点,就使得spark程序开发起来非常的方便,你想怎么写就怎么写,你想怎么玩就能怎么玩.当然了你也可以用java,python,R语言,spark都是支持的.先来说一下什么是RDD.
弹性分布式数据集 (RDD)
spark中很重要的一个概念RDD(弹性分布式数据集)它是可以执行并行操作且跨集群节点的元素的集合。RDD 可以从一个 Hadoop 文件系统(或者任何其它 Hadoop 支持的文件系统),或者一个在 driver program(驱动程序)中已存在的 Scala 集合,以及通过 transforming(转换)来创建一个 RDD。用户为了让它在整个并行操作中更高效的重用,也许会让 Spark persist(持久化)一个 RDD 到内存中。最后,RDD 会自动的从节点故障中恢复。
RDDs support 两种类型的操作: transformations(转换), 它会在一个已存在的 dataset 上创建一个新的 dataset, 和 actions(动作), 将在 dataset 上运行的计算后返回到 driver 程序. 例如, map
是一个通过让每个数据集元素都执行一个函数,并返回的新 RDD 结果的 transformation, reduce
reduce 通过执行一些函数,聚合 RDD 中所有元素,并将最终结果给返回驱动程序(虽然也有一个并行 reduceByKey
返回一个分布式数据集)的 action.
Spark 中所有的 transformations 都是 lazy(懒加载的),