今天完成了实验任务四-RDD编程初级实践,先在网上查了一下资料。
Spark大数据处理的核心是RDD,RDD的全称为弹性分布式数据集,对数据的操作主要涉及RDD的创建、转换以及行动等操作,在Spark系列(二)中主要介绍了RDD根据SparkContext的textFile创建RDD的方法,本小节将介绍RDD编程之转换(Transform)和行动(Action)两种操作。
RDD是分布式数据集的抽象
RDD是不可变的数据集合,每个RDD都被分成多个分区,这些分区运行在集群中的不同节点上。其中,RDD主要支持转换和行动操作,转换操作会生成一个新的RDD,而行动操作会对RDD计算一个结果,通常为一个数值类型,比如加和。区别这两种操作的方式在于Spark的惰性计算的计算机制。
惰性计算
在RDD进行转换操作时并不会真的进行计算,虽然在逻辑上进行转换操作会生成新的RDD,但是事实上进行转换操作并不会真的计算出新的RDD,它只会记住一串完整的转换操作链,然后在第一次行动操作操作时真正的计算,获得足够真实的数据。
即便是RDD的创建,如果在rdd = sc.textFile(...)时就把文件中所有行都读取进来并且保存下来会消耗掉很多的存储空间,在之后的转换操作过程中可能又会过滤、重构RDD,显然这是没有必要的。这也是RDD为什么能够快速进行大数据分析的原因。但是Spark 也会有犯傻的时候,默认情况下,Spark 的 RDD 会在每次对它们进行行动操作时重新计算,当然可以人为在多个行动操作中共用一个RDD,将RDD持久化,将RDD缓存到内存中,以分区的形式存储在集群中的各机器上,当然也可以将RDD持久化到磁盘上。利用persist()可以将RDD持久化,通过持久化的级别来控制RDD缓存到内存中还是磁盘上。
转化操作
转换操作返回的是一个新的RDD,转换出来的RDD是惰性求值的,通过转换操作,从已有的RDD转换为新的RDD的过程会生成谱系图(lineage graph)来记录RDD之间的依赖关系,根据这个lineage graph按需计算RDD,并且能在RDD部分数据丢失时进行恢复。
常用的转换操作:filter,map,foreach,mapPartition,foreachPartition
行动操作
行动操作把最终求得的结果返回到驱动器程序,或者写入外部存储系统中。由于行动操作需要生成实际的输出,它
们会强制执行那些求值必须用到的RDD的转化操作。
常用的行动操作:count,reduce,reduceByKey,take
原文地址:https://www.cnblogs.com/baixiaoli/p/12268490.html