2016-08-23 4 views
0

以下のコードブロックのパフォーマンスの違いは何ですか?spark flatMapToPairと[filter + mapToPair]

1.FlatMapToPair:このコードブロックは、単一の変換を使用するが、基本的に技術的に沿って進行するRDDにこの要素を許可しない、空のリストを返すことの内部フィルタ条件を有している

rdd.flatMapToPair(
    if (<condition>) 
     return Lists.newArrayList(); 

    return Lists.newArrayList(new Tuple2<>(key, element)); 
) 

2. [Filter + MapToPair]このコードブロックには2つの変換があります。最初の変換では、単純に上記のコードブロックと同じ条件を使用してフィルタリングしますが、フィルタの後に別の変換mapToPairを行います。

rdd.filter(
    (element) -> <condition> 
).mapToPair(
    (element) -> new Tuple2<>(key, element) 
) 

に関係なく変換の数のコードのこれらのブロックの両方で同じを実行するのに十分なインテリジェント火花あるいはこれら2回の変換であるように、コードブロック2に悪い行いますか?それは初期化してゴミする必要があるため

おかげ

答えて

2

実際にスパークが最初のケースに悪化し実行する各レコードのArrayList新を集めます。多数のレコードにわたってかなりのオーバーヘッドが発生することがあります。

それ以外の場合、スパークは遅延データ構造を使用するのに十分なインテリジェントであり、シャッフルを必要としない複数の変換を1つのステージに統合します。

異なる変換の明示的なマージが有益である(初期化されたオブジェクトの数を減らすか、またはより短い系統を維持する)場合がありますが、これはこれらの1つではありません。

関連する問題