1 Googleのプログラミングモデル
MapReduce - Wikipedia
Map ステップ - マスターノードは、入力データを受け取り、それをより細かい単位に分割し、複数のワーカーノードに配置する。受け取ったワーカーノードが、更に細かい単位に分割し、他の複数のワーカーノードに配置するという、より深い階層構造の分割を行うこともある。そして、各ワーカーノードは、その細かい単位のデータを処理し、処理結果を、マスターノードへと返す。
Reduce ステップ - 続いて、マスターノードが、Mapステップでの処理結果を集約し、目的としていた問題に対する答え(結果)を何らかの方法によって出力する。
どちらのステップでも並列処理ができるのが特徴らしい🐰
でかいデータも捌ける
障害にも強い。ノードの一部が死んでもリトライすればいいし
MapReduce入門:概要と使用開始 | Talend
Map
入力データは、まず小さなブロックに分割されます。続いて、各ブロックが処理のためにMapperに割り当てられます。
たとえば、ファイルに100個の処理対象レコードがある場合、100のMapperがそれぞれ1つのレコードを処理するように同時に実行することも、50のMapperがそれぞれ2つのレコードを処理するように同時に実行することも可能です。
Reduce
すべてのMapperが処理を完了した後、フレームワークは結果をシャッフルしてソートしてから、Reducerに渡します。Reducerは、Mapperが実行している間は開始できません。同じキーを持つすべてのmap出力値は、単一のReducerに割り当てられ、Reducerはそのキーの値を集計します。
2 関数としてのmap、reduce
衝撃レポート!!map, reduce の本質にせまる! - Qiita
mapは、あるコンテナ内のデータを変換する
変換前と変換後のコンテナは同じもの
各要素が、変換前要素から変換後要素になるだけ
手続き言語だとコンテナ部分も自分で書く必要があったが、map関数だと変換処理だけ書けばいい
reduceは、あるコンテナ内のデータを使って何か計算した結果を出す
変換前のコンテナと変換後のコンテナは違う可能性がある(変換後は何でも良い)
処理としては初期値+アキュムレーション(累積)
【初心者向け】map, filter, reduce で関数型プログラミングの第一歩【図あり】 - Qiita
mapは写像
reduceは「最終的に一つの値を得る」もの
reduce メソッドは配列を左から見ていって最終的に1つの値を得る。複数の値を含む配列を1つの値へと減らすため、reduce と呼ばれる。accumulate や fold とも呼ばれる。
これがシンプルで覚えやすくはある🐰
なぜmapやreduceやfilterなのか〜前編|こわくない関数型プログラミング
よくわからんが、
副作用とバグの無い処理を組み合わせてつくった方が品質が高い
関数型だとそれができる
mapやreduceは、副作用をおこさないし、スカラー以外に関数とかも入れたりできて柔軟なので、関数型との親和性が高い
ゆえにmapやreduceを使うことで品質が高まる
みたいなことが言いたい?🐰
🐰
google
Mapは分割マン
Reduceは集約・収束マン
扱う要素数が(集約したことで)減る
Reduceは減るの意
単純化するとか分類するとかもあるみたいだが
function
mapは写像、reduceは1つの値に集約
reduceはアキュムレーション(初期値から始めて、これまでの累積値を足す)なので、記述がちょっと難しい
いずれにせよ、変換前後のコンテナの用意をいちいち書かなくていいので楽
---
Links From <- mongodbの薄い本
Links To ->