前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark系列(四)RDD编程

Spark系列(四)RDD编程

作者头像
张凝可
发布2019-08-22 10:53:11
3850
发布2019-08-22 10:53:11
举报
文章被收录于专栏:技术圈技术圈

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RDD是分布式数据集的抽象
    • 惰性计算
      • 转化操作
        • 行动操作
        相关产品与服务
        大数据
        全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档