Spark编程指南之三:RDD基本概念

RDD是什么?

RDD(Resilient Distributed Dataset),弹性分布式数据集,是Spark的核心数据结构抽象。
它是弹性的,具有容错能力,能够重新计算失败结点。
它是分布式的,数据分布在多个结点上。
它是一个数据集,可以从外部加载数据,可以是文本文件,JSON,数据库等。

RDD有哪些特性?

内存计算、延迟计算、容错性、不可变性、逻辑分区、持久化策略、数据本地性。

RDD是如何实现弹性的?

Hadoop的MapReduce框架不适合大量的迭代和交互操作。
Spark的RDD抽象实现了将计算过程分为多个stage,并维护了有向无环图DAG,以支持延迟计算。弹性是指Spark计算的快速恢复能力:由于DAG的血统维护和节点容错,当一个节点出错后,可以通过DAG血统重新计算。并可以保存中间结果,实现大量的迭代操作。

RDD的transformation和Action操作有什么区别?

transformation操作两端都是RDD,从一个RDD生成另一个RDD。比如map(),flatmap(),filter(),reduceByKey()。action操作的返回值是一个值。比如first(),take(),collect(),count()。由于延迟计算,直到出现action操作时,Spark才会真正开始计算。

什么是窄依赖和宽依赖?

Transformation操作分为窄依赖和宽依赖。
窄依赖在一个分区内处理,可以在区内完成转换,与其他worker不用交互。
宽依赖中,下一个RDD的来源是多个父RDD,也称为shuffle transformation。
可以从操作后的RDD的来源数量来区分,若一个分区内的RDD来源于多个RDD的分区,则为宽依赖。窄依赖和宽依赖的区别是有无shuffle,也是划分stage的依据。

参考资料

http://spark.apache.org/docs/latest/rdd-programming-guide.html

猜你喜欢

转载自blog.csdn.net/weixin_42628594/article/details/84800978
今日推荐