spark RDD常用運算元(三)
阿新 • • 發佈:2018-11-07
- first、take、collect、count、top、takeOrdered、foreach、fold、reduce、countByValue、lookup
- 演算法解釋
- first:返回第一個元素
- take:rdd.take(n)返回第n個元素
- collect:rdd.collect() 返回 RDD 中的所有元素
- count:rdd.count() 返回 RDD 中的元素個數
- top:按照降序的或者指定的排序規則,返回前n個元素
- takeOrdered:對RDD元素進行升序排序,取出前n個元素並返回,也可以自定義比較器(這裡不介紹),類似於top的相反的方法
- foreach:迴圈RDD中的每個元素
- fold:rdd.fold(num)(func) 一般不用這個函式和 reduce() 一 樣, 但是提供了初始值num,每個元素計算時,先要合這個初始值進行摺疊, 注意,這裡會按照每個分割槽進行fold,然後分割槽之間還會再次進行fold
- reduce:並行整合RDD中所有資料, 類似於是scala中集合的reduce
- countByValue:各元素在 RDD 中出現的次數 返回{(key1,次數),(key2,次數),…(keyn,次數)}
- Lookup函式對(Key,Value)型的RDD操作,返回指定Key對應的元素形成的Seq。 這個函式處理優化的部分在於,如果這個RDD包含分割槽器,則只會對應處理K所在的分割槽,然後返回由(K,V)形成的Seq。 如果RDD不包含分割槽器,則需要對全RDD元素進行暴力掃描處理,搜尋指定K對應的元素。
- scala程式碼
var arrays = Array(1,2,3,4,5,6) var arrayRDD = sc.parallelize(arrays) println("first:" + arrayRDD.first()) println("take:" + arrayRDD.take(2).mkString(",")) println("takeOrdered:" + arrayRDD.takeOrdered(2).mkString(",")) println("fold:" + arrayRDD.fold(2)((x, y) => x + y)) println("collect:" + arrayRDD.collect().mkString(",")) println("count:" + arrayRDD.count()) println("top:" + arrayRDD.top(3).mkString(",")) println("reduce:" + arrayRDD.reduce((x, y) => x + y)) println("countByValue:" + arrayRDD.countByValue()) var rdd1 = sc.parallelize(List((1, "a"), (2, "b"), (3, "c"))) println("lookup:" + rdd1.lookup(2))
- 過濾結果
first:1 take:1,2 takeOrdered:1,2 fold:27 collect:1,2,3,4,5,6 count:6 top:6,5,4 foreach:123456 countByValue:Map(5 -> 1, 1 -> 1, 6 -> 1, 2 -> 1, 3 -> 1, 4 -> 1) lookup:WrappedArray(b)