【问题标题】:Window Vs GroupBy Performance in SparkSpark 中的 Window 与 GroupBy 性能
【发布时间】:2019-09-09 09:53:40
【问题描述】:

我是 spark 的新手,我观察到在某些情况下,窗口函数方法和 groupBy 方法可以相互替代。在这里,我想从性能的角度了解哪个更好,为什么?这两种方法都会导致数据重新洗牌,但在哪些情况下一种会比另一种更有效?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    据我了解,groupBy 性能更高,因为它使用部分聚合。所以使用groupBy,并不是所有的记录都被打乱,而只有部分聚合器(例如avg,那就是总和和计数)。

    另一方面,window-function 总是会打乱你的记录,聚合是在之后完成的,因此应该会更慢。

    但实际上没有groupBy 与窗口函数的选择,因为在大多数情况下,您需要将groupBy 结果与原始数据的连接结合起来(除非您可以使用广播连接,否则可能会很昂贵) ,而且更多时候您无法使用groupBy 实现逻辑(运行总和/平均值、领先/滞后等)。

    但不幸的是,关于此类主题的(官方)文献很少......

    【讨论】:

    • 我读到如果 groupBy 后面有一个 join,那么 spark 会尝试以最佳方式对数据进行洗牌。 umbertogriffo.gitbooks.io/… 我的意思是,它会以这样一种方式对数据进行洗牌,即在 grouby 和 join 操作之间进行最小洗牌,但对此没有太多了解。
    • @Hitesh 但此文档与 RDD 有关,可能与 Dataset/Dataframe 不同
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    相关资源
    最近更新 更多