在Spark中,依赖关系是指RDD之间的依赖关系。根据依赖关系的不同,可以将依赖分为宽依赖和窄依赖。
1. 窄依赖:当一个父RDD的每个分区只被一个子RDD的一个分区所依赖时,就称这种依赖为窄依赖。窄依赖的特点是父RDD的每个分区只会被一个子RDD的一个分区所使用,因此在计算过程中不需要进行数据的shuffle操作,计算效率较高。
例如,下面的代码中,rdd1和rdd2之间的依赖关系就是窄依赖:
```
val rdd1 = sc.parallelize(Seq((1, "a"), (2, "b"), (3, "c")))
val rdd2 = rdd1.mapValues(_.toUpperCase())
```
2. 宽依赖:当一个父RDD的分区被多个子RDD的分区所依赖时,就称这种依赖为宽依赖。宽依赖的特点是父RDD的分区需要被多个子RDD的分区所使用,因此在计算过程中需要进行数据的shuffle操作,计算效率较低。
例如,下面的代码中,rdd1和rdd2之间的依赖关系就是宽依赖:
```
val rdd1 = sc.parallelize(Seq((1, "a"), (2, "b"), (3, "c")))
val rdd2 = rdd1.groupByKey()
```