《深入理解Spark》之 reduceByKey

 XML Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

 

package com.lyzx.day16

import org.apache.spark.{SparkContext, SparkConf}

class T2 {

  /**
   * reduceByKey  = groupByKey + reduce
   *从功能上讲相当于先做GroupByKey然后再做reduce操作但是比groupByKey+reduce操作效率要高
   * 即对于键值对的RDD来说,应用于所有的key相同的值做操作
   *
   * 由于reduceByKey是先做groupByKey后做reduce
   * 所以它包含shuffle操作(groupByKey包含shuffle操作)
   *前面说过
   *   功能上:reduceByKey  = groupByKey + reduce
   *   效率上:reduceByKey  > groupByKey + reduce
   * 原因是reduceByKey在map端自带Combiner
   * 例如wordCount例子中map端
   *  [("java",(1,1,1,1)),("c",(1,1,1,1))]
   *  如果在map做Combiner就像[("java",(4)),("c",(4))]
   *  在reduce端fatch时效率会高
   */
  def f1(sc:SparkContext): Unit ={
    val arr = List(1,2,3,4,5,5,4,3,2,1)

    //rdd中的数据如下[(1,2,3,4,5,5,4,3,2,1)]
    val rdd = sc.parallelize(arr)
    //mapRdd中的数据如下[((1,1),(2,2),(3,3),...(5,5),....,(1,1))]
    val mapRdd = rdd.map(item=>(item,item*10))
    val reduceRdd = mapRdd.reduceByKey(_+_)
    reduceRdd.foreach(println)
  }
}

object T2{
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("myTest").setMaster("local")
    val sc = new SparkContext(conf)

    val t = new T2()
    t.f1(sc)
    sc.stop()
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值