私が持っている: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()のコンセプトを把握しようとしていますが、これがどのように機能するのかを知るたびに、新しい質問が発生します... ありがとうございます。
お返事ありがとうございます。あなたの最後の答えから私は最後の質問があります。ですから、map()内にデータの移動やシャッフルがない場合、なぜ誰でもmapValues()を使用するようアドバイスします。 map()が**キーを**変更できることを知っているので、シャッフルまたは再分割をしていると推測しました。 (キー、値)のペアRDD上でmap()操作でキーを変更すると、パーティションを変更するという意味ではありませんか? e.x:A_RDD.partitionBy(新しいHashPartitioner(2))。map()どのようにキーを分割するのですか? – Spartan
いいえ、同じものではないパーティション情報が不足していることを意味します。 –