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
