深入理解Spark RDD——RDD信息对象

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/beliefer/article/details/99291781

RDDInfo用于描述RDD的信息,RDDInfo提供的信息如下:

  • id:RDD的id。
  • name:RDD的名称。
  • numPartitions:RDD的分区数量。
  • storageLevel:RDD的存储级别(即StorageLevel)。
  • parentIds:RDD的父亲RDD的id序列。这说明一个RDD会有零到多个父RDD。
  • callSite:RDD的用户调用栈信息。
  • scope:RDD的操作范围。scope的类型为RDDOperationScope,每一个RDD都有一个RDDOperationScope。RDDOperationScope与Stage或Job之间并无特殊关系,一个RDDOperationScope可以存在于一个Stage内,也可以跨越多个Job。
  • numCachedPartitions:缓存的分区数量。
  • memSize:使用的内存大小。
  • diskSize:使用的磁盘大小。
  • externalBlockStoreSize:Block存储在外部的大小。

RDDInfo还提供了以下方法:

  • isCached:是否已经缓存。isCached的实现见代码清单1。

代码清单1   isCached的实现

  def isCached: Boolean = (memSize + diskSize > 0) && numCachedPartitions > 0
 
 
  • compare:由于RDDInfo继承了Ordered,所以重写了compare方法以用于排序。compare的实现见代码清单2。

代码清单2   compare的实现


 
 
  1. override def compare(that: RDDInfo): Int = {
  2. this.id - that.id
  3. }

此外,RDDInfo的伴生对象中定义了fromRdd方法,用于从RDD构建出对应的RDDInfo,其实现见代码清单3。

代码清单3  RDDInfo伴生对象的fromRdd方法


 
 
  1. private[spark] object RDDInfo {
  2. def fromRdd(rdd: RDD[_]): RDDInfo = {
  3. val rddName = Option(rdd.name).getOrElse(Utils.getFormattedClassName(rdd))
  4. val parentIds = rdd.dependencies.map(_.rdd.id)
  5. new RDDInfo(rdd.id, rddName, rdd.partitions.length,
  6. rdd.getStorageLevel, parentIds, rdd.creationSite.shortForm, rdd.scope)
  7. }
  8. }

根据代码清单3,fromRdd方法的执行步骤如下:

  1. 获取当前RDD的名称(即name属性)作为RDDInfo的name属性,如果RDD还没有名称,那么调用Utils工具类的getFormattedClassName方法(见附录A)生成RDDInfo的name属性。
  2. 获取当前RDD依赖的所有父RDD的身份标识作为RDDInfo的parentIds属性。
  3. 创建RDDInfo对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值