2017-06-12 11 views
0

パーティションを識別:スパークmapPartitionsWithIndex:パーティションを識別

mapPartitionsWithIndex(index, iter) 

方法は、各パーティションに機能を駆動中に生じます。私は、 "インデックス"パラメータを使ってパーティションを追跡できることを理解しています。

"index = 0"条件を使用してデータセットのヘッダーを削除するために、このメソッドを使用した例が多数あります。しかし、どのようにして最初に読み取られたパーティション(「インデックス」パラメータを0に変換する)が本当にヘッダであることを確認する必要があります。それがランダムであるか、または使用されている場合にはパーティショナーに基づくものではありません。

+0

数字の1つを教えてください。 – hadooper

答えて

2

これはランダムであるか、パーティショナーに基づいています(使用されている場合)。 ?これはランダムではなく、パーティショニング番号です。 (0,1)(1,26)(2,51)(1,27)(0,2)(0,3)(:あなたは

val base = sc.parallelize(1 to 100, 4)  
base.mapPartitionsWithIndex((index, iterator) => { 

    iterator.map { x => (index, x) } 

}).foreach { x => println(x) } 
簡単な例以下の結果とその下にすることができます0,2)(1,28)(2,52) (1,29)(0,5)(1,30)(1,31)(2,53)(1,32)(0,6) ... ...

+0

私が理解しているように、1から25の数字はインデックスが0に等しい1つのパーティションにあります。 私の質問は、これは最初の25の数字が一緒にグループ化され、パーティション(0)にも入ります。 @bdr –

+0

データの分割方法によって異なります。私の例では、そのちょうどその数が100/4です。しかし、文字列の場合、ハッシュ・パーティショナー。一番下の行は、パーティショナーに依存します。ペアになったRDDの場合、デフォルトのPartitionerはHash Partitionerです。 – BDR

+0

そうでなければ、実装/記述しない限り、 'index = 0'と仮定することは安全です。 は最初の行を与えます。 @BDR –

関連する問題