文章目录
RDD操作分为lazy和non-lazy两种
Transformation(lazy):也称转换操作、转换算子
Action(non-lazy):立即执行,也称动作操作、动作算子
1、Transformation
对于转换操作,RDD的所有转换都不会直接计算结果。
-
仅记录作用于RDD上的操作
-
当遇到动作算子(Action)时才会进行真正计算
1.1 map
map(func) :对原RDD中每个元素运用func函数,并生成新的RDD
map算子输入分区与输出分区一一对应。
val rdd1 = sc.makeRDD(1 to 9,2)
rdd1.map(_*2).collect.foreach(println)
//输出 2 4 6 8 10 12 14 16 18
1.2 filter
filter(filter):对原RDD中每个元素使用func函数进行过滤,并生成新的RDD
val rdd1 = sc.makeRDD(1 to 9,2)
rdd1.filter(_>5).collect.foreach(println)
//输出 6 7 8 9
1.3 mapValues
原RDD中的Key保持不变,与新的Value一起组成新的RDD中的元素,仅适用于PairRDD。
val rdd1=sc.parallelize(List("dog","tiger","lion","cat","panther","eagle"))
val rdd4 = rdd3.map(x=>(x.length,x))
rdd4.mapValues(x=>"_"+x+"_").collect.foreach(println)
输出:(3,_dog_)
(5,_tiger_)
(4,_lion_)
(3,_cat_)
(7,_panther_)
(5,_eagle_)
1.4 distinct
distinct([numTasks])):去重
val conf = new SparkConf