Spark——map和mapPartitions的区别

张三
李四
张三丰
李世民
张三

对名字做wordcount

	val spark: SparkSession = SparkSession.builder().master("local[2]").appName("mappartition").getOrCreate()
    val sc: SparkContext = spark.sparkContext
    import spark.implicits._
    val rdd: RDD[String] = sc.textFile("src/data/1234")

//map写法  将值全部拿出来处理
rdd.map(x=>(x.charAt(0),1)).reduceByKey(_+_).foreach(println)
//mapPartitions写法  将每个分区内的值分别进行统计 内部先统计一次 然后最后在统计 减少了数据的shuffle的过程
rdd.mapPartitions(f=>{
      val lst:ListBuffer[(Char,Int)] = ListBuffer[(Char,Int)]()
      while(f.hasNext){
        lst.append((f.next().charAt(0),1))
      }
      lst.groupBy(_._1).map(x=>(x._1,x._2.size)).toIterator
    }).foreach(println)

//mapPartitions的另一种写法
rdd.mapPartitions(x=>x.map(x=>(x.charAt(0),1)).toArray.groupBy(_._1).map(x=>(x._1,x._2.size)).toIterator)
      .reduceByKey(_+_).foreach(println)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值