目录
RDD宽窄依赖的区别
- 窄依赖
- 每个父RDD的一个Partition最多被子RDD的一个Partition所使用
- map
- flatMap
- filter
- 每个父RDD的一个Partition最多被子RDD的一个Partition所使用
- 宽依赖
- 一个父RDD的Partition会被多个子RDD的Partition所使用
- groupbykey
- reducebykey
- sortBykey
- 在宽依赖中rdd之间会发生数据交换,这个交换的过程称为rdd的shuffle
- 只要是宽依赖必然发生shuffle
- 在宽依赖进行数据交换时,只有等待所有分区数据交换完成后,才能进行后续的计算,非常影响计算速度
- 一个父RDD的Partition会被多个子RDD的Partition所使用
DAG有向无环图
- DAG 管理维护rdd之间依赖关系,保证代码的执行顺序, DAG会根据依赖关系划分stage,每个stage都是一个独立的计算步骤,当发生宽依赖时,会单独拆分一个计算步骤(stage),进行相关数据计算,可以保证每个单独的stage可以并行执行在发生宽依赖进行shuffle时,会独立的方法执行shuffle计算,拆分计算步骤的本质是为了保证数据计算的并行执行.
- 查看spark的计算过程,通过DAG判断算子是宽依赖还是窄依赖
- 拆分了计算stage是宽依赖,没有拆分是窄依赖
- 启动spark的历史日志
- start-history-server.sh
窄依赖
# 判断宽窄依赖
from pyspark import SparkContext
sc = SparkContext()
rdd = sc.paralle