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()。

  • 相关阅读:
    中文词频统计及词云制作 25
    实验一 DOS实验 25
    字符串练习 25
    Python、循环的练习 25
    用requests库和BeautifulSoup4库爬取新闻列表 25
    爬取新闻列表 25
    Mockito使用总结
    20121116
    20121123
    20121115
  • 原文地址:https://www.cnblogs.com/students/p/14230532.html
Copyright © 2011-2022 走看看