建设能源官方网站,wordpress整站无法打开,培训行业seo整站优化,网站源码安装教程一、什么是依赖关系 这里通过一张图来解释#xff1a;
result_rdd是由tuple_rdd使用reduceByKey算子得到的#xff0c; 而tuple_rdd是由word_rdd使用map算子得到的#xff0c;word_rdd又是由input_rdd使用flatMap算子得到的。它们之间的关系就称为依赖关系#xff01;
二…一、什么是依赖关系 这里通过一张图来解释
result_rdd是由tuple_rdd使用reduceByKey算子得到的 而tuple_rdd是由word_rdd使用map算子得到的word_rdd又是由input_rdd使用flatMap算子得到的。它们之间的关系就称为依赖关系
二、什么是宽窄依赖
窄依赖父RDD的一个分区的数据只给了子RDD的一个分区 【不用经过Shuffle】 特点一对一或者多对一不经过Shuffle性能相对较快 但无法实现全局分区、排序、分组等
一个Stage内部的计算都是窄依赖的过程全部在内存中 完成。
宽依赖父RDD的一个分区的数据给了子RDD的多个分区【需要调用Shuffle的分区器来实现】 特点一对多必须经过Shuffle性能相对较慢可以实现全 局分区、排序、分组等
Spark的job中按照宽依赖来划分Stage
宽窄依赖本质只是一种标记标记两个RDD之间的依赖关系
三、为什么要标记宽窄关系
1、提高数据容错的性能避免分区数据丢失时需要重新构建整个RDD
举例如果子RDD的某个分区的数据丢失
不标记不清楚父RDD与子RDD数据之间的关系必须重新构建整个父RDD所有数据标记了父RDD一个分区只对应子RDD的一个分区按照对应关系恢复父RDD的对应分区即可
2、提高数据转换的性能将连续窄依赖操作使用同一个Task都放在内存中直接转换
举例如果RDD需要多个map、flatMap、filter、 reduceByKey、sortByKey等算子的转换操作
不标记每个转换不知道会不会经过Shuffle都使用不同的 Task来完成每个Task的结果要保存到磁盘标记了多个连续窄依赖算子放在一个Stage中共用一套 Task在内存中完成所有转换性能更快。