shuffle
是spark
重新分配数据的一种机制,它使得这些数据可以跨不同区域进行分组- 这通常涉及到在
executor
和驱动器程序之间拷贝数据,使得shuffle
成为一个复杂的、代价高昂的操作
- 这通常涉及到在
在
spark
里,特定的操作需要数据不会跨分区分布。如果跨分区分别,则需要混洗。以
reduceByKey
操作的过程为例。一个面临的挑战是:一个key
的所有值不一定在同一个分区里,甚至不一定在同一台机器里。但是它们必须共同被计算。混洗是一个代价比较高的操作,它涉及到磁盘,数据序列化,网络
IO
某些混洗操作会大量消耗堆内存空间,因为混洗操作在数据转换前后,需要使用内存中的数据结构对数据进行组织
混洗操作还会在磁盘上生成大量的中间文件。