
376 12 章 ビッグデータ:スケールを追求
プログラミングモデルの抽象レベルは、ユーザの視界から実装の細部を隠すために作られた、より強力な
ツー
ルやシステムが次々に登場していることを反映して、時間とともに着実に上がっている。複数のコン
ピュータを必要とするほどの規模でデータサイエンスを行っている場合、明示的にプログラミングしている
わけではなくても、裏ではおそらく MapReduce が動いている。
大規模なデータサイエンスの処理の中には、次のような基本構造を持つ重要なタイプのものがある。
• データレコードや文字列、ファイルを集めたディレクトリなど、大量の要素を反復処理する。
• 特定のフィールドの値や、個々の単語の出現頻度や特定のパターンの有無など、個々の要素から関心
のあるものを抽出する。
• すべての要素をカバーするようにそれらの中間結果を集計し、適切な結果を生成する。
このようなタイプの問題の代表例としては、単語の出現頻度カウント、k 平均法、PageRank の計算など
がある。これらは単純な反復処理アルゴリズムで解決できるが、それでは実行時間は入力サイズに対して線
形に増えていってしまう。ファイルが 1 台のマシンのメモリに収まりきらないほど入力サイズが大きいとき
には、そのような処理では不十分である。数十億のツイートを対象として単語の出現頻度を数えるとか、数
億個の Facebook プロフィールで k 平均法を行う、インターネット上のすべてのウェブサイトを対象として
PageRank ...