Job逻辑执行图
典型的Job逻辑执行图如上所示,经过下面四个步骤可以得到最终执行结果:
1.从数据源(可以是本地file,内存数据结构, HDFS,HBase等)读取数据创建最初的RDD。
2.对RDD进行一系列的transformation()操作,每一个transformation()会产生一个或多个包含不同类型RDD。
3.对最后的final RDD进行action()操作,每个partition计算后产生结果result。
4.将result回送到driver端,进行最后的f(list[result])计算。
一些典型的transformation()的计算过程及数据依赖图
1) union(otherRDD)
union()将两个RDD简单合并在一起,不改变partition里面的数据。没有shuffle过程。该操作可以用来处理来自多个数据源的日志文件,若输入的RDD中有重复数据,Spark的union()也会包含这些重复数据(如有必要,可用distinct()去重)
2) groupByKey(numPartitions)
groupByKey()只需要将Key相同的records聚合在一起,一个简单的shuffle过程就可以完成。ShuffledRDD中的