2016-09-14 6 views
1

RDDのマップ関数がマップタスクを生成し、arrayのマップ関数が新しいタスクを生成しないことがわかりました。これはreduce関数です。Spark/Scalaのarray.mapとrdd.mapの違いは何ですか?

どのような違いがありますか?いつでもどこでもforeachの代わりにmap/reduce関数を使用することをお勧めしますか?

+1

'map'関数は、文字通りMapタスクを作成することを意味しません。 –

+2

スパーク 'map'は、スカラコレクション' map'のように見えるように設計されています。使い方はかなり似ていますが、 'map'コレクションよりもはるかに多くなります。 – Simon

答えて

3

私はRDDのためのマップ機能は、マップタスクを生成見つけ、 配列のマップ機能は、新しいタスク

これはオレンジの比較にりんごのビットでは生成されません。

RDDは、分散データセットの抽象です。あなたが1つで操作しているとき、変換は遅れているMapPartitionsRDDを作成します。それ自体はRDDです。

あなたはArray[T]で作業しているとき、すべてが変換は、このようなのArray[T]Array[U]か何かからすることができ、ローカルおよびインメモリであり、それは厳密に評価されます。

RDDが基底型TArray[U]自体でない限りArray[T]は、これらの特性のいずれを有していないながら、その人自身が、分散方式で各ラン、より小さな集合と見なすことができるパーティションに分割されています。

いつでも/ foreach の代わりにmap/reduce関数を使用することをお勧めしますか?

また、このような質問に答えるのは難しいです。 Map-Reduceは、分散並列計算に使用される一般的なプログラミングモデルです。一方、forおよびforeachは、非常に特定の目的に使用されるプログラミング構造です。

1

スパークスケジューラ(ドライバプロセスで実行中)は、配列またはRDDおよびDStreams以外のデータ構造のタスクをスケジュールしません。

RDD/DStreamsのすべての操作(変換またはアクション)を認識し、それらのタスクをスケジュールしてタスクに分けます。

scheduler-->(knows RDD & schedules)-->Jobs-->(run in)-->Stages-->(evaluated in)-->Tasks 

scheduler-->(does not know array)-->ignore 

あなたがマップ/削減、私はforeachとしてmapreduceとforeachのようにそれを考えると言います。すべてがリンクで説明されているように異なる目的のためです。ここで正確に知りたいことを確認してください。

関連する問題