2016-12-10 15 views
1

私が持っている:AggregateByKeyパーティショニング?

A_RDD = anRDD.map() 

B_RDD = A_RDD.aggregateByKey() 

さてさて、私の質問は:私が好きA_RDD後partitionBy(新しいHashPartitioner)を入れた場合

は:

A_RDD = anRDD.map().partitionBy(new HashPartitioner(2)) 

B_RDD = A_RDD.aggregateByKey() 

1)は、これが同じ効率的になります私がそれをそのまま残しておけば、最初は? aggregateByKey()はA_RDDのhashPartitionerを使用します。

2)または私は最初の例のようにそれを残す場合、aggregateByKey()は最初のキーによってすべてのパーティションを集約し、その後に、より効率的な方法で「集約」(キー、値)ペアを送信します右のパーティション?

3)RDD上のmap、flatMap、およびその他の変換で、(キー、値)のペアをどうやって分割するのか議論ができないのはなぜですか? 例えば、すべてのタプルのmap()操作中に、=>を使って、このタプルをマップe.x:map(パーティション)でパーティション化された特定のパーティション に送ることができます。

私はaggregateByKey()のコンセプトを把握しようとしていますが、これがどのように機能するのかを知るたびに、新しい質問が発生します... ありがとうございます。

答えて

1
  • あなたがaggregateByKeypartitionByを置く場合、それは通常、単独のaggregateByKeyよりも効率になります。マップ側の組み合わせを効果的に無効にします。
  • あなたがそこから離れるとマップ側の組み合わせがあり、通常はより効率的です。
  • データの移動がないため、シャッフル操作ではパーティショニングは行われません。操作は各マシンでローカルに実行されます。
+0

お返事ありがとうございます。あなたの最後の答えから私は最後の質問があります。ですから、map()内にデータの移動やシャッフルがない場合、なぜ誰でもmapValues()を使用するようアドバイスします。 map()が**キーを**変更できることを知っているので、シャッフルまたは再分割をしていると推測しました。 (キー、値)のペアRDD上でmap()操作でキーを変更すると、パーティションを変更するという意味ではありませんか? e.x:A_RDD.partitionBy(新しいHashPartitioner(2))。map()どのようにキーを分割するのですか? – Spartan

+0

いいえ、同じものではないパーティション情報が不足していることを意味します。 –

関連する問題