2016-05-31 11 views
1

私は(key, python_obj)(​​自体はそれほど小さなPythonクラスではありません)の大きなリストを得るためにaggregateByKeyを使用するPysparkにアルゴリズムを書いています。SparkアキュムレータがaggregateByKeyよりも高速である可能性がありますか?

理論的には、巨大な辞書を作ってアキュムレータでも同じことを実現できますか?

努力する価値があるのですか、それともアキュムレータが異なるユースケースを意味していますか?

答えて

2

アキュムレータの高速化が可能な境界ケースがありますが、一般的に答えはマイナスです。各パーティションのための部分的な結果にcollectを呼び出し、ドライバーのマシン上でローカルに、最終的な出力を処理するaggregateByKey使用してアキュムレータを実装し、少しは同等である事を簡素化:あなたは、アキュムレータの信頼性の問題と少し厄介なAPIこれを無視した場合でも

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

単にドライバのマシンをボトルネックにし、一般的なケースでは実現できないかもしれません。

関連する問題