CascadingのPipeのサブクラスであるGroupByクラスについて。
|
|
Cascadingにおいて、ソートを行うのがGroupBy。
import cascading.pipe.GroupBy;
Hadoopのシャッフル(ソート)処理、あるいはSQLのorder byに相当する。
例 | 説明 |
---|---|
pipe = new GroupBy(pipe, new Fields(項目名,…)); |
指定された項目でソートする。(昇順) |
pipe = new GroupBy(pipe, new Fields(項目名,…),
true); |
逆順(降順)でソートする。 |
pipe = new GroupBy(pipe); |
全項目でソートする。 |
pipe = new GroupBy(Pipe.pipes(pipe1, …), new Fields(項目名,…)); |
複数のパイプのデータをまとめてソート(マージ)する。 |
pipe = new GroupBy(Pipe.pipes(pipe1, …)); |
複数のパイプの先頭項目でソート(マージ)する。 |
第1引数に新パイプ名を入れるコンストラクターもある。[2010-04-08]
新パイプ名を省略すると、各パイプの名前を「+」でつないだ名前になる。(例:"pipe1"と"pipe2"なら、"pipe1+pipe2"になる)
なぜSortByとかOrderByというクラス名でないかと言うと、たぶん主たる使用目的がEveryに渡すことだから。
Everyで集計を行う前にはキーでソートしておく必要がある。
pipe = new Every(
new GroupBy(pipe
, new Fields("key")),
new Fields("data"),
new Sum(new Fields("sum_data"), long.class)
);
この使い方は、SQLの書き方と似ている。
select key, sum(data) sum_data from pipe
group by key order by key;
Cascading1.2では、Everyと組み合わせたサブアセンブリーが追加された。[2011-12-25]
pipe = new SumBy(pipe
, new Fields("key"), new Fields("data"), new Fields("sum_data"), long.class);