S-JIS[2010-04-06/2011-12-25] 変更履歴

Cascading GroupBy

CascadingPipeのサブクラスであるGroupByクラスについて。


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);

Cascadingへ戻る / Hadoopへ戻る / Java目次へ行く / 技術メモへ戻る
メールの送信先:ひしだま