我有一个相当简单的PySpark作业,其中的最后一个阶段读取一些混洗的数据,在窗口上执行一些聚合,然后写入HDFS。中位数任务有:
各个任务之间存在偏差,但没有太大的变化。
我的问题:由于每个任务仅读取了130 MB的shuffle,并且没有进行shuffle写入(因为没有后续阶段),所以每个任务怎么可能会有2 GB的shuffle溢出?
我的理解是,如果执行数据占用过多的RAM,则混洗数据会从内存溢出到磁盘。但是在这里,从内存溢出的数量远远大于混洗数据的总大小。一般来说,混洗溢出的数据怎么会比混洗数据的大小大?