深入理解Spark RDD——RDD实现的初次分析

本文详细分析了Spark中的RDD(弹性分布式数据集)的实现,包括关键属性如partitions、preferredLocations和dependencies,以及compute、getPartitions等核心接口。RDD的不可变性和分区特性对于理解Spark的并行计算至关重要。此外,还探讨了如何获取RDD的偏好位置和依赖关系。
摘要由CSDN通过智能技术生成

RDD(Resilient Distributed Datasets,弹性分布式数据集)代表可并行操作元素的不可变分区集合。对于Spark的初学者来说,这个概念会十分陌生。即便是对于一些有Spark使用经验的人,要想说清楚什么是RDD,以及为什么需要RDD还是一件比较困难的事情。在《深入理解Spark RDD——为什么需要RDD?》一文解释了第二个问题,本文将开启对第一个问题的解答。

有些读者可能对本文的标题感到困惑,这是因为RDD的API非常多,所以本文首先对RDD中与调度系统息息相关的API方法进行分析,转换API、动作API及检查点API将在后续文章中进行介绍。

抽象类RDD定义了所有RDD的规范,我们从RDD的属性开始,逐步了解RDD的实现。

  • _sc:即SparkContext。_sc由@transient修饰,所以此属性不会被序列化。
  • deps:构造器参数之一,是Dependency的序列,用于存储当前RDD的依赖。RDD的子类在实现时不一定会传递此参数。由于deps由@transient修饰,所以此属性不会被序列化。
  • partitioner:当前RDD的分区计算器。partitioner由@transient修饰,所以此属性不会被序列化。
  • id:当前RDD的唯一身份标识。此属性通过调用SparkContext的nextRddId属性生成。
  • name:RDD的名称。name由@transient修饰,所以此属性不会被序列化。
  • dependencies_:与deps相同,但是可以被序列化。
  • partitions_:存储当前RDD的所有分区的数组。partitions_由@transient修饰,所以此属性不会被序列化。
  • storageLevel:当前RDD的存储级别。
  • creationSite:创建当前RDD的用户代码。creationSite由@transient修饰,所以此属性不会被序列化。
  • scope:当前RDD的操作作用域。scope由@transient修饰,所以此属性不会被序列化。
  • checkpointData:当前RDD的检查点数据。
  • checkpointAllMarkedAncestors:是否对所有标记了需要保存检查点的祖先保存检查点。<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值