mapPartitions与mapPartitionsWithIndex的应用解析

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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值