zoukankan      html  css  js  c++  java
  • 关于spark当中的reducebykey 和groupbykey两者的区别

    reducebykey:它的特点是当使用它的时候,这个时候在不同的partition 中的数据会进行简单的combiner。然后再在reduce端进行数据的累加。

    groupbykey:当采用它的时候。这个时候他不是对不同的partition中的数据进行combiner。而是直接在最后进行数据的累加。做最后的reduce。
      

    注:借用别人的一段代码:

    val words = Array("one", "two", "two", "three", "three", "three")  

    //下面的代码是对数组中的数据进行简单的转化。把数据转化成pairRDD的形式。

    val wordPairsRDD = sc.parallelize(words).map(word => (word, 1))  

    //下面是进行reducebykey的操作。直接对key相同的进行相加。

    val wordCountsWithReduce = wordPairsRDD.reduceByKey(_ + _)  

    // 下面的操作是对数据进行相加。但是他的操作是分两部分进行操作的。第一步是进行分组。第二步才是进行累加。

    val wordCountsWithGroup = wordPairsRDD.groupByKey().map(t => (t._1, t._2.sum)) 

    我在idea里面对这两个效果进行编辑,结果如下:

    从这张图当中我们可以看到最终的RDD操作是键对应值的这样的累加形式。直接对相同的key进行累加。

    上面这张图是对groupbykey的操作。从中我们可以看出他其实是对pairRDD的一个简单的迭代运算。就像上面所说的他实际在各个partition当中是不会进行

     数据的简单的combiner的。而只是一个简单的迭代运算。后面如果还需要进行相同key的一个累加还要做相对应的操作才能完成。

    从图中的打印结果我们能够清楚的看出。两者的区别在哪里。

    注:在spark2当中使用sparkssion代替了sparkcontext。最后变成了spark。然后将spark转化为sparkcontext。然后将数组当中的数据转化成RDD进行操作。

     

  • 相关阅读:
    JDK 和 OpenJDK 的区别
    IntelliJ IDEA 使用 Git 并将 GitHub 作为远程代码仓库
    SQL 常用语法记录整理
    SpringBoot SpringApplication底层源码分析与自动装配
    一步步从Spring Framework装配掌握SpringBoot自动装配
    SpringBoot系列教程起步
    Redis高级进阶
    Redis构建文章聚合信息分类网站
    Redis快速起步及Redis常用命令大全
    Redis构建处理海量数据的大型购物网站
  • 原文地址:https://www.cnblogs.com/gxgd/p/8862545.html
Copyright © 2011-2022 走看看