Spark中的aggregate和aggregateByKey的区别及疑惑
2016-09-21 16:31
357 查看
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 1 seqOp:1 2 seqOp:1 3 seqOp:3 4 seqOp:3 5 seqOp:3 6 comOp:3 1 comOp:4 3 7 >>>
从上面的代码的输出结果可以看出,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中关于groupByKey与reduceByKey的区别
- Spark RDD aggregateByKey
- [Spark--基础]--聚合操作-reduceByKey、combineBykey、groupBy和AggregateByKey
- spark中算子详解:aggregateByKey
- Spark中groupBy groupByKey reduceByKey的区别
- 大数据Spark “蘑菇云”行动第40课:Spark编程实战之aggregateByKey、reduceByKey、groupByKey、sortByKey深度解密
- 【Spark系列2】reduceByKey和groupByKey区别与用法
- Spark算子篇 --Spark算子之aggregateByKey详解
- spark中算子详解:aggregateByKey
- spark中groupByKey与reducByKey的区别
- spark 的transformations之bykey的区别
- spark的aggregateByKey简单用法
- [Spark_API]Transformation-reduceByKey()和aggregateByKey()
- Spark中 groupBy() 与groupByKey()的区别
- 结合Spark源码分析, combineByKey, aggregateByKey, foldByKey, reduceByKey
- Spark操作—aggregate、aggregateByKey详解
- Spark操作:Aggregate和AggregateByKey
- Spark编程之基本的RDD算子-aggregate和aggregateByKey
- Spark算子之aggregate和aggregateByKey