

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 SQL 窗口函数代替 join 和 groupBy
<a name="using-sql-window-functions"></a>

[窗口函数](https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-window.html)（Spark文档）对一组与当前记录有某种关联的行（称为*窗口*）执行计算。例如，它们可以与当前行位于同一个分区或框架中。窗口函数内置于 Spark 中，它们类似于聚合函数。*聚合函数**（例如`SUM`或`MAX`）对一组行进行运算，并为每个组计算一个返回值。*窗口函数对于处理任务很有用，例如计算移动平均值或根据当前行的相对位置访问行的值。

该Spark`groupBy`函数将数据收集成组，并对分组的数据执行聚合函数。使用时`groupBy`，先对数据进行Spark部分聚合，然后对简化的数据集进行洗牌。使用窗口函数时，会对整个数据集进行洗牌。窗口函数可以提供更快的运行时间。

在非常大的数据集中，如果列的基数很大，则建议使用窗口函数。但是，如果列的基数较小，则数据聚合较小，并且可以在联接中广播聚合结果。