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

  • 相关阅读:
    Prometheus监控k8s集合
    docker集合
    开源堡垒机jumpserver
    ELK日志分析平台
    安全名称解释
    CPU上下文切换
    平均负载
    234. 回文链表
    125. 验证回文串
    122. 买卖股票的最佳时机II
  • 原文地址:https://www.cnblogs.com/students/p/14230532.html
Copyright © 2020-2023  润新知