2.3.1.2 Value类型-mapPartitions()以分区为单位执行Map
----------------转载放原连接,违权必究--------------------------
1、格式:
mapPartitions(f : Iterator[T]=> Iterator[U],pP:Boolean = false) : RDD[U]
2、功能:
1、原来RDD中的元素按照一个分区为一个Iterator,遍历分区
2、每个分区数据(Iterator)依次按批次进入mapPartitions算子中的f
3、经过f函数的作用出来仍然是Iterator,形成一个新的RDD
4、mapPartitions算子的第二个参数表示是否保留上流RDD的分区,默认是false
3、例子:将一个RDD的数据分区,并使用mapPartitions算子将数据乘以2,形成新的RDD
1. package com.zhaoxuan.scalatest
2.
3.import org.apache.spark.rdd.RDD
4.import org.apache.spark.{SparkConf, SparkContext}
5.
6./**
7. * 3、例子:将一个RDD的数据分区,并使用mapPartitions算子将数据乘以2,形成新的RDD
8. * */
9.object MapPartitionsTest {
10. def main(args: Array[String]): Unit = {
11. val conf :SparkConf = new SparkConf().setAppName("mapPartitions算子测试").setMaster("local[*]")
12. val sc :SparkContext = new SparkContext(conf)
13. val numRdd : RDD[Int] = sc.makeRDD(1 to 6,2)
14. val twoNum1 : RDD[Int] = numRdd.mapPartitions((n) => n.map((m) => (m * 2)))
15. //简写
16. val twoNum2 :RDD[Int] = numRdd.mapPartitions(_.map(_ * 2))
17. twoNum2.collect().foreach(println)
18. }
19.}