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)
    

猜你喜欢

转载自blog.csdn.net/u010020897/article/details/83617365