一、RDD分区
分区是RDD被拆分并发送到节点的不同块之一
- 我们拥有的分区越多,得到的并行性就越强
- 每个分区都是被分发到不同Worker Node的候选者
- 每个分区对应一个Task
二、RDD的操作
分为lazy与non-lazy两种
- Transformation(lazy):也称转换操作、转换算子
- Actions(non-lazy):立即执行,也称动作操作、动作算子
1.转换算子
对于转换操作,RDD的所有转换都不会直接计算结果
- 仅记录作用于RDD上的操作
- 当遇到动作算子(Action)时才会进行真正计算
常用的算子:
1.map :对RDD中的每个元素都执行一个指定的操作来产生一个新的RDD
val conf:SparkConf=new SparkConf().setMaster("local[2]").setAppName("wordcount")
val sc:SparkContext=SparkContext.getOrCreate(conf)//以上两行代码为引入spark-shell
val rdd=sc.makeRDD(List(1,2,3,4))
val rdd1=rdd.map(x=>x*2) //定义一个操作方法:每个数乘以2
rdd1.collect.foreach(println) //遍历打印结果
//输出:2,4,6,8
2.filter:对元素进行过滤筛选,会把符合条件的元素保留在新的RDD中
//过滤出能被2整除的元素
val rdd=sc.parallelize(1 to 9)
rdd.filter(x=>x%2==0).collect.foreach