Spark中的aggregate和aggregateByKey的区别及疑惑
来源:互联网 发布:商城网站源码免费下载 编辑:程序博客网 时间:2024/06/05 12:05
aggregate(zeroValue,seq,comb,taskNums)
将初始值和第一个分区中的第一个元素传递给seq函数进行计算,然后将计算结果和第二个元素传递给seq函数,直到计算到最后一个值。第二个分区中也是同理操作。最后将所有分区的结果经过combine函数进行计算(先将前两个结果进行计算,将返回结果和下一个结果传给combine函数,以此类推),并返回最终结果。
>>> data = sc.parallelize((1,2,3,4,5,6),2)>>> def seq(a,b):... print 'seqOp:'+str(a)+"\t"+str(b)... return min(a,b)... >>> def combine(a,b):... print 'comOp'+str(a)+"\t"+str(b)... return a+b... >>> data.aggregate(3,seq,combine)seqOp:3 1seqOp:1 2seqOp:1 3seqOp:3 4seqOp:3 5seqOp:3 6comOp:3 1comOp:4 37>>>
从上面的代码的输出结果可以看出,1,2,3被分到一个分区中,4,5,6被分到一个分区中。3先和第一个元素1传给seq函数,返回最小值1,然后将1和第二个元素2传给seq函数,返回1,以此类推,最后返回第一个分区中的最小值1。第二个分区一样道理,最后结果返回最小值3.最后将初始值3和两个分区的结果经过combine函数进行计算,先将初始值3和第一个分区的结果1传给combine函数,返回4,然后将4和第二个分区结果3传给combine函数,返回最终结果7。
aggregateByKey(zeroValue,seq,comb,taskNums)
在kv对的RDD中,,按key将value进行分组合并,合并时,将每个value和初始值作为seq函数的参数,进行计算,返回的结果作为一个新的kv对,然后再将结果按照key进行合并,最后将每个分组的value传递给combine函数进行计算(先将前两个value进行计算,将返回结果和下一个value传给combine函数,以此类推),将key与计算结果作为一个新的kv对输出。
见代码:
>>> data = sc.parallelize([(1,3),(1,2),(1,4),(2,3)])>>> def seq(a,b):... return max(a,b)... >>> def combine(a,b):... return a+b... >>> data.aggregateByKey(3,seq,comb,4).collect()[(1, 10), (2, 3)]
但是,在使用时遇到了问题,困惑:
在启动pyspark时,如果是./bin/pyspark –master local[3]或3以上的数字或*都会返回预期的结果。
如果数字小鱼等于2,结果就会有出入。如[(1,7)(2,3)]。
不知道什么原因,网上有人说:怀疑对于data的计算默认使用并行计算,而我们设置lcoal时没有指定所用的cores数目,导致并行计算无法执行,只能保持某个计算结果,最终导致计算结果的错误。。。
- Spark中的aggregate和aggregateByKey的区别及疑惑
- Spark中的aggregate和aggregateByKey的区别及疑惑
- Spark编程之基本的RDD算子-aggregate和aggregateByKey
- Spark操作—aggregate、aggregateByKey详解
- Spark算子[09]:aggregateByKey、aggregate详解
- 【Spark Java API】Transformation(6)—aggregate、aggregateByKey
- spark的aggregateByKey简单用法
- spark中的aggregate action的实现过程
- treeAggregate和Aggregate的区别
- Spark函数讲解:aggregateByKey
- Spark函数讲解:aggregateByKey
- Spark RDD的aggregate算子
- [Spark--基础]--聚合操作-reduceByKey、combineBykey、groupBy和AggregateByKey
- mapreduce和spark的原理及区别
- 理解Spark RDD中的aggregate函数
- 理解Spark RDD中的aggregate函数
- Spark SQL中的聚合(Aggregate)实现
- spark aggregateByKey函数使用问题
- Linux五种IO模型性能分析
- java下载网络图片到本地
- 记录书写微信页面踩的几个坑,下不再犯
- String,StringBuffer,StringBuilder区别
- Python开发环境安装及Project interpreter not specified问题解决
- Spark中的aggregate和aggregateByKey的区别及疑惑
- SqlCommad对象 往数据库中添加一条数据
- C++如何判断是否在编写64位程序
- i.MX6Q -- Linux系统下FlexCAN总线的使用记录
- javabase64和图片相互转换
- 测试有感
- ACT趋之若鹜的发展趋势
- Objective-C-iOS常用小控件(UISegmentedControl)
- 端口扫描器