我在Pyspark中编写了一个算法,它使用aggregateByKey
来获取(key, python_obj)
的大列表(python_obj
本身就是一个不太小的Python类。)
理论上我可以通过创建一个庞大的字典来实现与累加器相同的,对吗?
是否值得努力或者是针对不同用例的累加器?
答案 0 :(得分:2)
可能存在边界情况,累加器可以更快,但一般来说答案是否定的。使用累加器简化一些实现aggregateByKey
的事情相当于在每个分区的部分结果上调用collect
并在驱动程序机器上本地处理最终输出:
rdd.mapPartitions(_.fold(zero)(combineOp)).collect.reduce(mergeOp)
即使您忽略累加器可靠性问题和稍微笨拙的API,这只会使驱动程序机器成为瓶颈,并且在一般情况下可能不可行。