RDD只是一个逻辑概念,在内存中并不会真正地为某个RDD分配存储空间(除非该RDD需要被缓存)。
数据操作分为transform()
和action()
两种。transform()
是一个单向操作,rdd1进行操作后会产生新的rdd2,不会修改rdd1。
依赖
窄依赖(NarrowDependency)
新生成的childRDD中的每一个分区都依赖parentRDD中的一部分分区
一对一依赖
map()
fliter()
区域依赖
union()
多对一依赖
cogroup()
join()
多对多依赖
cartesian()
宽依赖(ShuffleDependency)
新生成的childRDD中的每一个分区都依赖parentRDD中的每个分区的一部分
数据分区方法
水平划分
按照元素的下标划分
常用于输入数据的划分(Map)
Hash划分
HashPartitioner
经常被用于数据Shuffle阶段(Reducer)
Range划分
采用抽样方法来估算数据区域边界