2016-05-03 6 views
0

スパーク中:groupByの後にすべてが1つのエグゼキュータに行きます。 aの後にrepartition(x)を実行すると、rddはxエグゼキュータで配布されるか、またはx個のパーティションにチャンクされて、xrddブロックで1つのエグゼキュータが得られますか?スパーク中:どのようなパーティションが正確に機能しますか?

例:

rdd = rdd_tmp.groupBy.repartition(32).cache() 
rdd.count() 

私は32件のエグゼキュータを使用していると私はgroupBy operationを実行し、rddをキャッシュされた場合。 32個のRDDブロック

  • 32のエグゼキュータと

    1. 1 executorを1

    2. 各RDD

    で: は私が得ますか?

  • 答えて

    0

    最初にrdd_tmp.getNumPartitions()を実行します。 partitionが32未満の場合は、repartition(32)を使用してパーティションを32に増やすことができます。 32人のエグゼキュータをお持ちの場合、各エグゼキュータは1つのパーティションで動作します(32個のタスクがあり、各エグゼキュータには1つのタスクが割り当てられます)。

    あなたのケースでは、1人のエグゼキュータは1ブロックを取得します。

    注:rdd_tmp.getNumPartitions()が32より大きい場合、再パーティション(32)は機能しません。 coalesce(32)を使用してパーティションを縮小します。

    関連する問題