

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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彙總部分資料，然後隨機播放減少的資料集。當您使用視窗函數時，整個資料集會隨機播放。視窗函數可以提供更快的執行時間。

在非常大型的資料集中，如果資料欄的基數很大，則建議使用視窗函數。不過，如果資料欄的基數很小，則資料彙總會很小，而且可以在聯結中廣播彙總的結果。