1. 程式人生 > >spark RDD常用運算元(三)

spark RDD常用運算元(三)

- first、take、collect、count、top、takeOrdered、foreach、fold、reduce、countByValue、lookup


  • 演算法解釋
  1. first:返回第一個元素
  2. take:rdd.take(n)返回第n個元素
  3. collect:rdd.collect() 返回 RDD 中的所有元素
  4. count:rdd.count() 返回 RDD 中的元素個數
  5. top:按照降序的或者指定的排序規則,返回前n個元素
  6. takeOrdered:對RDD元素進行升序排序,取出前n個元素並返回,也可以自定義比較器(這裡不介紹),類似於top的相反的方法
  7. foreach:迴圈RDD中的每個元素
  8. fold:rdd.fold(num)(func) 一般不用這個函式和 reduce() 一 樣, 但是提供了初始值num,每個元素計算時,先要合這個初始值進行摺疊, 注意,這裡會按照每個分割槽進行fold,然後分割槽之間還會再次進行fold
  9. reduce:並行整合RDD中所有資料, 類似於是scala中集合的reduce
  10. countByValue:各元素在 RDD 中出現的次數 返回{(key1,次數),(key2,次數),…(keyn,次數)}
  11. 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)