RDD
のマップ関数がマップタスクを生成し、arrayのマップ関数が新しいタスクを生成しないことがわかりました。これはreduce関数です。Spark/Scalaのarray.mapとrdd.mapの違いは何ですか?
どのような違いがありますか?いつでもどこでもforeachの代わりにmap/reduce関数を使用することをお勧めしますか?
RDD
のマップ関数がマップタスクを生成し、arrayのマップ関数が新しいタスクを生成しないことがわかりました。これはreduce関数です。Spark/Scalaのarray.mapとrdd.mapの違いは何ですか?
どのような違いがありますか?いつでもどこでもforeachの代わりにmap/reduce関数を使用することをお勧めしますか?
私はRDDのためのマップ機能は、マップタスクを生成見つけ、 配列のマップ機能は、新しいタスク
これはオレンジの比較にりんごのビットでは生成されません。
RDD
は、分散データセットの抽象です。あなたが1つで操作しているとき、変換は遅れているMapPartitionsRDD
を作成します。それ自体はRDD
です。
あなたはArray[T]
で作業しているとき、すべてが変換は、このようなのArray[T]
Array[U]
か何かからすることができ、ローカルおよびインメモリであり、それは厳密に評価されます。
RDD
が基底型T
がArray[U]
自体でない限りArray[T]
は、これらの特性のいずれを有していないながら、その人自身が、分散方式で各ラン、より小さな集合と見なすことができるパーティションに分割されています。
いつでも/ foreach の代わりにmap/reduce関数を使用することをお勧めしますか?
また、このような質問に答えるのは難しいです。 Map-Reduceは、分散並列計算に使用される一般的なプログラミングモデルです。一方、for
およびforeach
は、非常に特定の目的に使用されるプログラミング構造です。
スパークスケジューラ(ドライバプロセスで実行中)は、配列またはRDD
およびDStreams
以外のデータ構造のタスクをスケジュールしません。
RDD/DStreams
のすべての操作(変換またはアクション)を認識し、それらのタスクをスケジュールしてタスクに分けます。
scheduler-->(knows RDD & schedules)-->Jobs-->(run in)-->Stages-->(evaluated in)-->Tasks
scheduler-->(does not know array)-->ignore
あなたがマップ/削減、私はforeachとしてmapとreduceとforeachのようにそれを考えると言います。すべてがリンクで説明されているように異なる目的のためです。ここで正確に知りたいことを確認してください。
'map'関数は、文字通りMapタスクを作成することを意味しません。 –
スパーク 'map'は、スカラコレクション' map'のように見えるように設計されています。使い方はかなり似ていますが、 'map'コレクションよりもはるかに多くなります。 – Simon