2016-05-31 61 views
1

我在Pyspark上寫了一個算法,它使用aggregateByKey來得到一個大列表(key, python_obj)(​​本身是一個不是很小的Python類)。Spark累加器可以比aggregateByKey快嗎?

從理論上說,我可以通過製作一個巨大的字典來實現與累加器相同的對吧?

這是值得的努力或累加器意味着不同的使用情況?

回答

2

可能會出現邊界情況,其中累加器可能更快,但通常情況下答案是否定的。簡化的東西實現aggregateByKey使用蓄電池一點點相當於調用上的每個分區部分結果collect和司機本地機器上處理的最終輸出:

rdd.mapPartitions(_.fold(zero)(combineOp)).collect.reduce(mergeOp) 

即使你忽略了蓄電池的可靠性問題,並略顯尷尬的API這只是使驅動器成爲瓶頸,並且在一般情況下可能不可行。