spark DataFrame聚合操作


在聚合操作中,需要指定鍵或分組方式,以及指定如何轉換一列或多列數據的聚合函數。s
除了處理任意類型的值之外,Spark還可以創建以下分組類型:

  • 最簡單的分組通過在select語句中執行聚合來匯總整個DataFrame
  • “group by”指定一個或者多個key也可以指定一個或者多個聚合函數,來對包括value的列執行行轉換操作。
  • “window”指定一個或者多個key也可以指定一個或者多個聚合函數,來對包含value的列執行轉換操作。
  • “grouping set”可用於在多個不同級別進行聚合。grouping set是SQL中的一個保留字,而在DataFrame中需要使用rollup和cube。
  • “rollup”指定一個或多個key,也可以指定一個或多個聚合函數,來對包含value的列執行轉換操作,並會針對指定的多個key進行分級分組匯總。
  • “cube”指定一個或多個key,也可以指定一個或多個聚合函數,來對包含value 的列執行轉換操作,並會針對指定的多個key進行全組合分組匯總。
    注意:要獲得一個精確的結果,開銷會非常大。但是計算出一個近似的結果要相對容易的多。通常使用一些近似函數,會提高spark作業的效率

聚合函數

count函數

count函數是一個轉換操作而不是一個動作操作。
count可以執行以下2種操作:

  • 對指定列進行計數
  • 使用count(*)或count(1)對所有列進行計數

approx_count_distinct函數

功能與count_distinct一樣,但是統計的結果允許有誤差。這里approx_count_distinct的另一個參數就指定了可容忍的誤差的最大誤差。

sumDistinct函數

去重后,進行求sum

方差和標准差

注意:Spark既支持統計樣本的標准差,也支持統計總體的標准差。

skewness和kurtosis

偏度系數(skewness)和峰度系數(kurtosis)都是對數據集中的極端數據點的衡量指標。
偏度系數衡量數據相對於平均值的不對稱程度。
峰度系數衡量數據分布形態陡緩程度。

協方差和相關性

cov和corr,它們分別用於計算協方差和相關性。相關性采用Pearson相關系數來衡量,范圍是-1~+1。協方差的范圍由數據中的輸入決定。
注意:協方差又分為樣本協方差和總體協方差。

聚合輸出復雜類型

分組

分組操作的步驟:

  • 指定要對其進行分組的一列或者多列。
  • 指定一個或者多個聚合操作。

利用表達式分組

使用Map進行分組

Map是以鍵為列,值為要執行的字符串形式的聚合函數。

window函數

在指定數據“窗口”上執行聚合操作,並使用對當前數據的引用來定義它,此窗口指定將哪些行傳遞給此函數。
注意:group-by與窗口函數之間的區別:
在使用group-by處理數據時,每一行只能進入一個分組;窗口函數基於稱為框的一組行,計算表的每一輸入行的返回值。也就是說一行數據,在不同的框中屬於不用的組。
Spark支持三種窗口函數:排名函數、解析函數和聚合函數。

分組集

group-by表達式可以對一組列上的值進行聚合操作。

rollup

當我們設置分組的key為多個列時,Spark會分析這些列,並根據各列中存在的實際數值,確定列值組合作為分組的key。而rollup分組聚合是一種多維聚合操作,可以執行多種不同group-by風格的計算。

cube

cube分組聚合則更進一步,它不同於rollup的分級聚合,而是對所有參與的列值進行所有維度的全組合聚合。

對元數據進行分組

透視轉換

透視轉換可以根據列中的不同行創建多個列。

用戶自定義的聚合函數

用戶定義的聚合函數(UDAF)是用戶根據自定義公式或業務邏輯定義自己的聚合函數的一種方法。可以使用UDAF來計算輸入數據組的自定義計算。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM