第一点就是涉及到分区的变化
shuffle是spark的数据迁移问题涉及到分区的变换,分区以后有没有产生shuffle。比如repartition增减分区默认会产生shuffle,而coalesce默认情况下是不shuffle的,只有第二个参数设置为true,才会产生shuffle。
第二点就是宽窄依赖问题
这个涉及到父算子给子算子传参,是宽依赖传参还是窄依赖传参
宽依赖:父RDD的一个分区会被子RDD的多个分区所依赖,此时涉及到shuffle问题,一个宽依赖就是一个stage,一个stage是一个TaskSet,有多少分区就会有多少个Task。
宽依赖的算子:groupByKey,reduceByKey,foldByKey,aggregateByKey
窄依赖:父RDD的一个分区只会被子RDD的单个分区所依赖。
窄依赖的算子:map flatMap,filter