Spark系列(四)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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值