【发布时间】:2019-09-09 09:53:40
【问题描述】:
我是 spark 的新手,我观察到在某些情况下,窗口函数方法和 groupBy 方法可以相互替代。在这里,我想从性能的角度了解哪个更好,为什么?这两种方法都会导致数据重新洗牌,但在哪些情况下一种会比另一种更有效?
【问题讨论】:
标签: scala apache-spark
我是 spark 的新手,我观察到在某些情况下,窗口函数方法和 groupBy 方法可以相互替代。在这里,我想从性能的角度了解哪个更好,为什么?这两种方法都会导致数据重新洗牌,但在哪些情况下一种会比另一种更有效?
【问题讨论】:
标签: scala apache-spark
据我了解,groupBy 性能更高,因为它使用部分聚合。所以使用groupBy,并不是所有的记录都被打乱,而只有部分聚合器(例如avg,那就是总和和计数)。
另一方面,window-function 总是会打乱你的记录,聚合是在之后完成的,因此应该会更慢。
但实际上没有groupBy 与窗口函数的选择,因为在大多数情况下,您需要将groupBy 结果与原始数据的连接结合起来(除非您可以使用广播连接,否则可能会很昂贵) ,而且更多时候您无法使用groupBy 实现逻辑(运行总和/平均值、领先/滞后等)。
但不幸的是,关于此类主题的(官方)文献很少......
【讨论】: