前面已经给大家讲过RDD原理以及常用的转换算子,今天就再给大家说说RDD的动作算子有哪些,以便大家更能全面的理解和掌握。
对于动作算子来说,本质上动作算子是通过SparkContext执行提交作业操作,触发RDD DAG(有向无环图)的执行;所有的动作算子都是急迫型(non-lazy),RDD遇到Action就会立即计算。
案例:
val rdd=sc.parallelize(List(1,2,3,4,5,6))
rdd.count
//6
案例:
val rdd = sc.parallelize(List((1,3),(1,2),(1,4),(2,3),(3,6),(3,8)),3)
rdd.countByKey
//scala.collection.Map[Int,Long] = Map(3 -> 2, 1 -> 3, 2 -> 1)
案例:
val rdd = sc.parallelize(List((1,3),(1,2),(1,4),(2,3),(3,6),(3,8)),3)
rdd.countByValue
//scala.collection.Map[(Int, Int),Long] = Map((3,6) -> 1, (1,4) -> 1, (1,3) -> 1, (2,3) -> 1, (1,2) -> 1, (3,8) -> 1)
案例:
val rdd=sc.parallelize(List(1,2,3,4,5,6))
rdd.collect
//Array[Int] = Array(1, 2, 3, 4, 5, 6)
案例:
val rdd=sc.parallelize(List(1,2,3,4,5,6))
rdd.top(3)
// Array[Int] = Array(6, 5, 4)
案例:
val rdd=sc.parallelize(List(1,2,3,4,5,6))
rdd.take(3)
// Array[Int] = Array(1, 2, 3)
案例:
val rdd = sc.parallelize(Array(2,5,4,6,8,3))
rdd.takeOrdered(3)
// Array[Int] = Array(2, 3, 4)
案例:
val rdd1 = sc.makeRDD(1 to 10)
rdd1.takeSample(true,4,10)
//Array[Int] = Array(10, 10, 2, 3)
案例:
val rdd=sc.parallelize(List(1,2,3,4,5,6))
rdd.first
// 1
案例:
val a=sc.parallelize(1 to 100)
a.reduce((x,y)=>x+y)
或
a.reduce(_+_) //与上面意思一样
// 5050
val b=sc.parallelize(Array(("A",0), ("A",2), ("B",1), ("B",2), ("C",1)))
b.reduce((x,y)=>{(x._1+y._1,x._2+y._2)})
// (AABBC,6)
案例:
val rd=sc.parallelize(1 to 10)
rd.foreach(println)
//1 2 3 4 5 6 7 8 9 10
案例:
val rdd=sc.parallelize(List(('a',1), ('a',2), ('b',3), ('c',4)))
rdd.lookup('a')
//Array(1, 2)
案例:
val y=sc.parallelize(10 to 30)
y.max
//30
案例:
val y=sc.parallelize(10 to 30)
y.min
//10
案例:
val rdd=sc.parallelize(1 to 10,2)
rdd.saveAsTextFile("hdfs://hadoop000:8020/data/rddsave/")
//会把RDD的结果分成2个区的文件保存到hdfs上
案例:
var rdd1 = sc.makeRDD(1 to 10,2)
//将该RDD所有元素相加得到结果
rdd.aggregate(0)(_+_,_+_)
//Int = 55
案例:
var rdd1 = sc.makeRDD(1 to 10,2)
//将该RDD所有元素相加得到结果
rdd.fold(0)(_+_)
//Int = 55