zoukankan      html  css  js  c++  java
  • spark reduceByKey && groupByKey

    reduceBykey是一个transformation 算子

    reduceByKey:   使用 func 函数合并具有相同键的值。对于每个key对应的多个value进行了merge操作,最重要的是它能够先在本地进行merge操作。merge可以通过func自定义。

    groupByKey : 对每个key对应的多个value进行操作,但是只是汇总生成一个sequence(返回值是一个(key,iterable[])),本身不能自定义函数,只能通过额外通过map(func)来实现。

    在词频统计中,reduceByKey可以实现词频的累加统计,groupByKey也可以实现,下面展示2种实现方法

    val data:RDD[String]=spark.sparkContext.textFile(datapath)
    data.flatMap(x=>x.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println(_))
    val data:RDD[String]=spark.sparkContext.textFile(datapath)
    data.flatMap(x=>x.split(" ")).map((_,1)).groupByKey().map(x=>(x._1,x._2.toList.sum)).foreach(println(_))

    使用reduceByKey()的时候,本地的数据先进行merge然后再传输到不同节点再进行merge,最终得到最终结果。

    而使用groupByKey()的时候,并不进行本地的merge,全部数据传出,得到全部数据后才会进行聚合成一个sequence,

    groupByKey()传输速度明显慢于reduceByKey()。

  • 相关阅读:
    一个小例子说明函数式编程
    单元测试的规范
    单元测试jest部署
    正向代理与反向代理
    Cookie与Session
    从输入URL到页面加载发生了什么?
    使用Vue-cli3.0创建的项目,如何发布npm包
    Vue中通过Vue.extend动态创建实例
    使用npm link 加速调试
    单元测试之断言
  • 原文地址:https://www.cnblogs.com/students/p/14230532.html
Copyright © 2011-2022 走看看