Spark中groupBy groupByKey reduceByKey的區別
阿新 • • 發佈:2018-01-26
分享 red htm key-value com length .html () str
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
參考
- https://www.iteblog.com/archives/1357.html
- http://blog.csdn.net/guotong1988/article/details/50556871
- http://blog.cheyo.net/178.html
Spark中groupBy groupByKey reduceByKey的區別