Spark核心RDD:combineByKey函数详解
来源:互联网 发布:matlab智能算法有哪些 编辑:程序博客网 时间:2024/05/17 23:57
为什么单独讲解combineByKey?
因为combineByKey是Spark中一个比较核心的高级函数,其他一些高阶键值对函数底层都是用它实现的。诸如 groupByKey,reduceByKey等等
如下给出combineByKey的定义,其他的细节暂时忽略(1.6.0版的函数名更新为combineByKeyWithClassTag)
如下解释下3个重要的函数参数:- createCombiner: V => C ,这个函数把当前的值作为参数,此时我们可以对其做些附加操作(类型转换)并把它返回 (这一步类似于初始化操作)
- mergeValue: (C, V) => C,该函数把元素V合并到之前的元素C(createCombiner)上 (这个操作在每个分区内进行)
- mergeCombiners: (C, C) => C,该函数把2个元素C合并 (这个操作在不同分区间进行)
如下看一个使用combineByKey来求解平均数的例子
a 、score => (1, score),我们把分数作为参数,并返回了附加的元组类型。 以"Fred"为列,当前其分数为88.0 =>(1,88.0) 1表示当前科目的计数器,此时只有一个科目
b、(c1: MVType, newScore) => (c1._1 + 1, c1._2 + newScore),注意这里的c1就是createCombiner初始化得到的(1,88.0)。在一个分区内,我们又碰到了"Fred"的一个新的分数91.0。当然我们要把之前的科目分数和当前的分数加起来即c1._2 + newScore,然后把科目计算器加1即c1._1 + 1
c、 (c1: MVType, c2: MVType) => (c1._1 + c2._1, c1._2 + c2._2),注意"Fred"可能是个学霸,他选修的科目可能过多而分散在不同的分区中。所有的分区都进行mergeValue后,接下来就是对分区间进行合并了,分区间科目数和科目数相加分数和分数相加就得到了总分和总科目数
执行结果如下:
阅读全文
0 0
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Spark核心RDD:combineByKey函数详解
- Spark RDD操作:combineByKey函数详解
- Spark核心RDD:foldByKey函数详解
- Spark RDD中Transformation的combineByKey、reduceByKey,join详解
- Spark 核心算子:combineByKey()
- Spark RDD算子【三】combineByKey
- spark 算子combineByKey 详解
- Spark函数讲解:combineByKey
- Spark 工作原理及核心RDD 详解
- Spark核心RDD:Sort排序详解
- Spark核心编程:RDD持久化详解
- 第148讲:Spark RDD中Transformation的combineByKey、reduceByKey详解
- RDD : combineByKey
- mybatis在xml文件中处理大于号小于号的方法
- Android发送权限受限的广播,指定接受方!
- 机器学习的分类及各自特点
- 彻底删除R Studio残留数据,全新重装R
- Luogu 1074(tarjan+dp)
- Spark核心RDD:combineByKey函数详解
- RecyclerView原理分析
- 一款好用的蓝牙键盘–罗技K38
- 重新编译jt.jar
- ReactiveCocoa Unknown warning group ‘-Wreceiver-is-weak’,ignored警告
- 十月随想录
- PHP运行原理
- java递归的应用和实例
- IntelliJ IDEA中工具栏,功能区的显示和关闭