groupByKey
- 操作:将相同键的所有值收集到一个集合中。
- 实现:不会在map端进行局部聚合,而是直接将所有相同键的数据传输到reduce端进行聚合。
- 缺点:由于没有本地聚合,
groupByKey
会导致大量的数据传输和shuffle,尤其在数据量较大时,可能会造成内存消耗和性能瓶颈。
reduceByKey
- 操作:通过指定的聚合函数对相同键的值进行聚合。
- 实现:
reduceByKey
在map端就开始进行本地聚合(combine),减少了需要传输到reduce端的数据量。只有在map端聚合后,reduce端才会进行最终的汇总操作。- 优点:通过在map端进行局部聚合,极大减少了shuffle的压力。map端的机器数量通常大于reduce端,因此通过在map端的聚合,可以平均分配计算压力,提高整体效率。