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进行操作。

     

  • 相关阅读:
    松软科技web课堂:SQLServer之ROUND() 函数
    松软科技web课堂:SQLServer之LEN() 函数
    接口工具比较
    记录EXCEL格式和TXT文本格式之间的互转
    Fiddler安装证书
    Nginx概述及安装配置
    YSLOW(一款实用的网站性能检测工具)
    通用测试用例大全
    Macaca环境配置及样例执行
    ADB命令
  • 原文地址:https://www.cnblogs.com/gxgd/p/8862545.html
Copyright © 2011-2022 走看看