combineByKey(crateCombiner,mergeValue,mergeCombiners,partitioner)

最常用的基于Key的聚合函数,返回的类型可以和输入的类型不一样

许多基于key的聚合函数都用到了它,例如说groupByKey()

参数解释

遍历partition中的元素,元素的key,要么之前见过的,要么不是。

如果是新元素,使用我们提供的crateCombiner()函数

如果是这个partition中已经存在的key,则使用mergeValue()函数

合计每个partition的结果的时候,使用mergeCombiners函数

例子1:求平均值

val scores = sc.parallelize(Array(("jake",80.0),("jake",90.0),("jake",85.2),("mike",85.0),("mike",90.0),("mike",78.0)))
求总和
val scores2=scores.combineByKey(score=>(1,score), (c1:(Int, Double), newScore)=>(c1._1+1, c1._2 + newScore), (c1:(Int, Double), c2:(Int, Double))=>(c1._1+c2._1, c1._2+c2._2))
输出:
scores2.foreach(println)
(jake,(3,255.2))
(mike,(3,253.0))
求平均值
val avarage = scores2.map({case(name,(num,score))=>(name,score/num)})
avarage.foreach(println)
(jake,255.2/3)
(mike,253/3)

RDDs之combineByKey()的更多相关文章

  1. SPARK 学习笔记一

    1.Spark基于内存进行运算 2.Spark核心是SprintContext,是程序的入口 3.RDDs是提供抽象的数据集,通过RDDS可以方便对分布在各个节点的数据进行计算,而且忽略细节 4.RD ...

  2. RDDs基本操作、RDDs特性、KeyValue对RDDs、RDD依赖

    摘要:RDD是Spark中极为重要的数据抽象,这里总结RDD的概念,基本操作Transformation(转换)与Action,RDDs的特性,KeyValue对RDDs的Transformation ...

  3. spark源码阅读 RDDs

    RDDs弹性分布式数据集 spark就是实现了RDDs编程模型的集群计算平台.有很多RDDs的介绍,这里就不仔细说了,这儿主要看源码. abstract class RDD[T: ClassTag]( ...

  4. Spark API 之 combineByKey(一)

    1       前言 combineByKey是使用Spark无法避免的一个方法,总会在有意或无意,直接或间接的调用到它.从它的字面上就可以知道,它有聚合的作用,对于这点不想做过多的解释,原因很简单, ...

  5. spark之combineByKey

    combineByKey def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombi ...

  6. Spark 的combineByKey函数

    在Spark中有许多聚类操作是基于combineByKey的,例如group那个家族的操作等.所以combineByKey这个函数也是比较重要,所以下午花了点时间看来下这个函数.也参考了http:// ...

  7. Chapter 3. Programming with RDDs

     Programming with RDDs This chapter introduces Spark's core abstraction for working with data, the r ...

  8. 2.sparkSQL--DataFrames与RDDs的相互转换

    Spark SQL支持两种RDDs转换为DataFrames的方式 使用反射获取RDD内的Schema     当已知类的Schema的时候,使用这种基于反射的方法会让代码更加简洁而且效果也很好. 通 ...

  9. Spark算子篇 --Spark算子之combineByKey详解

    一.概念 rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s@%s" %(a,b), lambda a,b:& ...

随机推荐

  1. 深入学习Java对象创建的过程:类的初始化与实例化

    在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完 ...

  2. mysql count(*)与count(1)的区别

    count() 对行数进行计算,包括NULL: count(column) 计算特定的列的值的行数,不包括NULL: count(1)这个用法和count()的结果是一样的. http://blog. ...

  3. effective java 3th item1:考虑静态工厂方法代替构造器

    传统的方式获取一个类的实例,是通过提供一个 public 构造器.这里有技巧,每一个程序员应该记住.一个类可以对外提供一个 public 的 静态工厂方法 ,该方法只是一个朴素的静态方法,不需要有太多 ...

  4. [2018CCPC吉林赛区(重现赛)- 感谢北华大学] 补题记录 躁起来

    1007 High Priestess 埃及分数 1008 Lovers 线段树维护取膜意义下的区间s和. 每个区间保存前缀lazy和后缀lazy. #include <iostream> ...

  5. whu-contest-2019(online)

    比赛网址:http://whu2019.contest.codeforces.com/group/YyBKO8xFiH/contest/102167 赛后总结: T:今天参加了武汉大学校赛网络赛,在c ...

  6. Requests库整理

    一.Requests库的安装 win平台下,直接在命令行使用 pip install requests 即可进行安装 成功后测试如下 >>> import requests > ...

  7. Java复习笔记(一):概念解释和运行步骤

    一.java的一些概念 JAVA语言分为三:java ee,java se,java me java se:  java标准版,java的核心功能所在 java ee: java企业级开发,包含ser ...

  8. Python---列表的学习(二)

    列表的第二部分 (1)列表的排序 1)使用方法sort()可对列表进行永久性排序 food = ['apple','orange','pear','grape'] food.sort() print( ...

  9. hive正则表达式的用法

    regexp_replace用法 1.  截取字符串中的汉字部分: 举个栗子:select regexp_replace('七夕节comming!来啦','([^\\u4E00-\\u9FA5]+)' ...

  10. 【LeetCode】[0002] 【两数之和】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 给出两个非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果 ...