深入理解RDD

什么是RDD?
RDD 是一个分布式的可变集合
常用的Transformation(即转换,延迟加载)
通过并行化scala集合创建RDD
数据既可以放到内存当中,又可以放在磁盘当中
五个特点:
1、一系列分区组成
2、每一个分区上都会有一个函数作用在上面
3、RDD和RDD之间存在依赖关系
4、如果RDD里面装的是Key-value类型,有分区器
5、如果是从hdfs这种文件系统中创建RDD,会有最优位置,是为了数据本地化

RDD是一个逻辑概念,一个RDD中有多个分区,一个分区在executor节点上执行时,他就是一个迭代器
一个RDD有多个分区,一个分区肯定在一台机器上。在hdfs中读取数据是一个切片对应一个分区。
RDD就相当于一个代理对象,实际操作的数据分布在多台机器上,对RDD操作实际上就是对每一个分区
进行操作,也就是对每一台机器上的那个迭代器进行操作,应为迭代器引用这要操作的数据。

RDD从hdfs上读取数据首先会生成一个hadoopRDD,hadoopRDD返回值是一个[K,V]类型的RDD,key是偏
移量,value是内容,返回的时候只返回value


spark执行wordcount生成几个RDD
sc.textFile("hdfs://spark/input/a.txt").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).saveAsTextFile("/")

·sc.textFile("hdfs://spark/input/a.txt")  生成2个RDD
生成两个RDD,首先从hdfs获取上数据的时候生成一个hadoopRDD,生成的RDD是[K,V]类型的,然后会
将K去掉,并且返回给sc一个会包含V的RDD。

·接下来的flatMap又会生成一个RDD,在flatMap源码中,将每一个分区(迭代器)调用scala原生的flatMap
方法。

·接下来的map又会生成一个RDD,在map方法底层,会将每一个分区(迭代器)调用scala原生的map方法

·reduceByKey也生成一个RDD

·saveAsTextFile也会生成一个RDD

所以总共会生成6个RDD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值