zoukankan      html  css  js  c++  java
  • Spark算子


    释义

    reduceByKey类似reduce,但reduceByKey 是先根据key进行分组,再将每个组内的记录归并成1个记录,最终返回一个PairRDD,k为key类型,v为每个组归并后的记录类型

    方法签名如下:

    def reduceByKey(func: (V, V) => V): RDD[(K, V)] = self.withScope {
        ...
    }
    
    • func: 根据key分组后的每个组,组内进行归并最终只有一个结果。输入类型为V跟V,输出为V,即输入类型与输出类型一致

    案例1

    统计单词个数/wordcount
    参考:https://www.cnblogs.com/convict/p/14828084.html



    案例2

    已知市场上每个店的销售的水果及单价,求市场上每种水果的平均价格

    object TestReduceByKey {
      def main(args: Array[String]): Unit = {
        val conf: SparkConf = new SparkConf().setAppName("TestReduceByKey").setMaster("local[1]")
        val sc: SparkContext = new SparkContext(conf)
        val data = Array(("Apple", 5.0), ("Apple", 5.5), ("Banana", 2.0), ("Pear", 2.0))
        val result: Array[(String, Double)] = sc.parallelize(data)
          .map(v => (v._1, (v._2, 1)))
          .reduceByKey((v1, v2) => (v1._1 + v2._1, v1._2 + v2._2))
          .map(v => (v._1, v._2._1 / v._2._2))
          .collect()
        result.foreach(println)
      }
    }
    

    输出

    (Apple,5.25)
    (Pear,2.0)
    (Banana,2.0)
    

    解释

    1. 先map成新元组,即(name, (price, 1))
    2. 调用reduceByKey后,此时v1与v2都是value值,即都是上一步的(price, 1),此时同个key的组内price与price相加,1与1相加做为数量和,最终形成(price之和, 数量之和) 的形式
    3. 对每个组的结果进行 price之和 除以 数量之和 的操作,得出每个水果的均价



    尊重写作权利,转载请注明出处 ^_^
  • 相关阅读:
    软件测试理论提炼
    测试左移与右移
    RFS工具基础学习
    机遇——沃特·马龙
    SVN (Subversion+tortoiseSVN)使用手册
    MongoDB基本使用
    win7系统快捷键操作大全
    SQL Server Profiler使用方法
    转载《soapUI 学习日志》
    HTMLTestRunner中文测试报告
  • 原文地址:https://www.cnblogs.com/convict/p/14869032.html
Copyright © 2011-2022 走看看