算子 -mapPartitionsWithIndex - 将待处理的数据以分区为单位发送到计算节点进行处理,这里的处理是指可以进行任意的处理,哪怕是过滤数据,在处理时同时可以获取当前分区索引
需求:获取第二个分区的数据
package com.atguigu.bigdata.spark.core.operator.transform.test
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object RDD_mapPartitionsWithIndex_01 {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator")
val sc = new SparkContext(sparkConf)
// TODO 算子 -mapPartitionsWithIndex - 将待处理的数据以分区为单位发送到计算节点进行处理,
// 这里的处理是指可以进行任意的处理,哪怕是过滤数据,
// 在处理时同时可以获取当前分区索引
// 需求:获取第二个分区的数据
val rdd = sc.makeRDD(List(1, 2, 3, 4), 2)
// 第一个分区[1,2] 第二个分区[3,4]
val mapRDD: RDD[Int] = rdd.mapPartitionsWithIndex(
(index, iter) => {
// 如果满足条件返回iter数据,否则返回空的iter
if (index == 1) {
iter
} else {
Nil.iterator
}
}
)
mapRDD.collect().foreach(println)
sc.stop()
}
}