Rob Pike, Sean Dorward, Robert Griesemer, Sean Quinlan,
Scientific Programming Journal, vol. 13 (2005), pp. 277-298. GFS,Map Reduceを用いたプロセスを容易に記述するための,スクリプト言語.この論文では, Map, Reduceという言葉ではなく,Filter, Aggregate という言葉を使っているようだが,なぜなのかは不明.ひとつのsawzallプログラムは一段のmap,reduceに相当するが,複数のsawzall ぷろぐらむをチェインすることで,複数段のmap reduceができる.が,複数段の実行はパイプライン的には実行できないようだ. 下のプログラムは,浮動小数点のレコードを読み込んで,レコード数,総和,自乗の総和を求めている.最初の3行が変数定義で,それぞれの型と,sum型のaggregateをすることを指定している.4行目でレコードを読み込み,最後の3行でaggregatorへの出力を行っている.
count: table sum of int; total: table sum of float; sum_of_squares: table sum of float; x: float = input; emit count <- 1; emit total <- x; emit sum_of_squares <- x * x;table XXX of TYPE のXXX が aggregationの種別になる.これらは,言語で定義され,ユーザが新たに定義することはできない.これはaggregationをオプティマイズするため.可能なaggregationは以下の通り.
- collection: 集合を作る
- sample(xxx): xxx個をランダムに抜き出す
- sum: 総和.TYPEが複合型だった場合には,要素ごとに総和をとる
- maximum(xxx): 上位 xxx個を取り出す
- quantile(xxx): xxx個に分位する値を返す
- top(xxx): もっとも頻度高く現れる値上位xxx個を返す
- unique(xxx): 重複を除いた要素数の概算を返す.xxxは精度を制御する内部テーブルのサイズ.
0 件のコメント:
コメントを投稿