mapPartions和map函数类似,只不过映射函数的参数由RDD中的每一个元素变成了RDD中每一个分区的迭代器。如果在映射的过程中需要频繁创建额外的对象,使用mapPartitions要比map高效的多。
mapPartionsWithIndex跟mapPatition的区别是返回的值多出一个Index,这个函数里面numSlices默认为1。
//mappartition val mapPart=sc.makeRDD(test).mapPartitions(x=>{ var result=new ListBuffer[String]() while(x.hasNext){ var it=x.next() result += it } result.iterator }).persist(StorageLevel.MEMORY_AND_DISK).foreach(println) //mappartitionwithIndex val mapPartWIndex=sc.makeRDD(test,3).mapPartitionsWithIndex((index,x)=>{ var result=scala.collection.mutable.ArrayBuffer[String]() var i="" while(x.hasNext){ i+= x.next() println(i) } (result+=(index+"--->"+i)).iterator }).persist(StorageLevel.MEMORY_AND_DISK).foreach(println)