[Spark_API]Transformation-reduceByKey()和aggregateByKey()
来源:互联网 发布:网络集线器hub 编辑:程序博客网 时间:2024/06/03 20:41
aggregateByKey()与reduceByKey()(两者都会调用combineByKey()),唯一不同的是aggregateByKey()你会给出一个初始值zeroValue.
之所以reduceByKey()更好,是由于它使用了MapReduce的combiner这个特征,比如在类似+,*的这类combiner函数计算中,由于元素的顺序都无关紧要,使得Spark能够在多个分区上聚合(reduce)数值。
然而aggregateByKey()会聚合一个特定键的值,聚合(combined)的结果可以是任何特定的对象类型。你必须确定这些值在分区内部如何聚合(同一个节点),以及你如何将不同区的结果聚合。ReduceByKey()是一个特殊的例子,特殊之处在于值聚合后的数据类型和值的类型相同,在分区内部聚合的操作和聚合不同分区结果的操作一样。
作为一个例子,假如你有一组数组
val pairs = sc.parallelize(Array(("a", 3), ("a", 1), ("b", 7), ("a", 5)))现在你想使用对于同一个键,对它所有的值进行加法聚合,在这个例子中,reduceByKey和aggregateByKey()是一样的。
val resReduce = pairs.reduceByKey(_ + _) //the same operation for everythingresReduce.collectres3: Array[(String, Int)] = Array((b,7), (a,9))//0 is initial value, _+_ inside partition, _+_ between partitionsval resAgg = pairs.aggregateByKey(0)(_+_,_+_)resAgg.collectres4: Array[(String, Int)] = Array((b,7), (a,9))然而,假如你想要聚合的结果是同一个键的所有值的set,但值本身的数据类型是整数.在这个情况下,你只能使用aggregateByKey()
来确定最后聚合结果的类型为set。
import scala.collection.mutable.HashSet//the initial value is a void Set. Adding an element to a set is the first//_+_ Join two sets is the _++_val sets = pairs.aggregateByKey(new HashSet[Int])(_+_, _++_)sets.collectres5: Array[(String, scala.collection.mutable.HashSet[Int])] =Array((b,Set(7)), (a,Set(1, 5, 3)))
0 0
- [Spark_API]Transformation-reduceByKey()和aggregateByKey()
- [Spark--基础]--聚合操作-reduceByKey、combineBykey、groupBy和AggregateByKey
- RDD Transformation——reduceByKey
- pair RDD groupByKey countByKey countByValue aggregateByKey reduceByKey 测试
- 结合Spark源码分析, combineByKey, aggregateByKey, foldByKey, reduceByKey
- aggregateByKey
- 【Spark Java API】Transformation(6)—aggregate、aggregateByKey
- Spark RDD中Transformation的combineByKey、reduceByKey,join详解
- 【Spark Java API】Transformation(11)—reduceByKey、foldByKey
- reduceByKey
- 大数据Spark “蘑菇云”行动第40课:Spark编程实战之aggregateByKey、reduceByKey、groupByKey、sortByKey深度解密
- spark_API-collectAsMap
- groupByKey 和reduceByKey 的区别:
- 第148讲:Spark RDD中Transformation的combineByKey、reduceByKey详解
- reduceByKey和groupByKey区别与用法
- reduceByKey和groupByKey区别与用法
- Spark中的aggregate和aggregateByKey的区别及疑惑
- Spark编程之基本的RDD算子-aggregate和aggregateByKey
- pip安装
- 在untiy3d中获取通过父游戏物体得到子游戏物体
- C++ 建造者模式
- Python测试用例生成脚本(合并相应单元格以及写入单行数据)代码实例
- mui开发h5+app过程中页面间参数传递的总结第一篇
- [Spark_API]Transformation-reduceByKey()和aggregateByKey()
- 如何获得高并发的经验
- java对Redis 基本操作
- 软件设计原则(四)依赖倒置原则 -Dependence Inversion Principle
- st 表--求区间最值
- Android面试题-终极解决ViewPager.setCurrentItem中间很多页面切换方案
- 弹框提示
- 第一章、Activity 的生命周期和启动模式
- 百度地图api不能进行定位