Spark中groupBy groupByKey reduceByKey的區別


groupBy

和SQL中groupby一樣,只是后面必須結合聚合函數使用才可以。

例如:

hour.filter($"version".isin(version: _*)).groupBy($"version").agg(countDistinct($"id"), count($"id")).show()
groupByKey

對Key-Value形式的RDD的操作。

例如(取自link):

val a = sc.parallelize(List("dog", "tiger", "lion", "cat", "spider", "eagle"), 2)
val b = a.keyBy(_.length)//給value加上key,key為對應string的長度
b.groupByKey.collect
//結果 Array((4,ArrayBuffer(lion)), (6,ArrayBuffer(spider)), (3,ArrayBuffer(dog, cat)), (5,ArrayBuffer(tiger, eagle)))
reduceByKey

與groupByKey功能一樣,只是實現不一樣。本函數會先在每個分區聚合然后再進行總的統計,如圖:

而groupByKey則是

因此,本函數比groupByKey節省了傳播的開銷,盡量少用groupByKey

參考


免責聲明!

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



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