package com.github.stakafum.mapreduce;
/**
*
* @author takafumi
*
* MapReduceのReduceフェーズを取り扱うクラス
* アプリの開発者がReduceフェーズを扱うときはこのクラスのサブクラスでreduceメソッドだけを記述すれば良い。
* @param <InputKey> Reduceフェーズの入力キーのクラス
* @param <InputValue> Reduceフェーズの入力バリューのクラス
* @param <InputKey> Reduceフェーズの出力キーのクラス
* @param <InputKey> Reduceフェーズの出力バリューのクラス
*/
public abstract class Reducer<InputKey, InputValue, OutputKey, OutputValue>{
/**
*@param ikey 入力キー
*@param ivalues 入力バリューをGroupedValuesクラスでグループ化した組
*@param okey 出力されるキー
*@param ovalue 出力されるバリュー
*
*/
InputKey ikey;
GroupedValues<InputValue> ivalues;
OutputKey okey;
OutputValue ovalue;
protected Reducer(){
}
/**
* 入力のキーとバリューのセッターメソッド
* @param key 入力キー
* @param groupedInputValues 入力バリュー
*/
void setKeyValue(InputKey key, GroupedValues<InputValue> groupedInputValues){
this.ikey = key;
this.ivalues = groupedInputValues;
}
/**
*
* 入力キーのゲッターメソッド
* サブクラスではこのメソッドを使い入力キーを獲得する。
* @return 入力キー
*/
protected InputKey getInputKey(){
return this.ikey;
}
/**
*
* 入力バリューのゲッターメソッド
* サブクラスではこのメソッドを使い入力バリューの組を獲得する。
* @return グループ化した出力キー
*/
protected GroupedValues<InputValue> getInputValue(){
return this.ivalues;
}
/**
*
* 出力キーのゲッターメソッド
* @return 出力キー
*/
OutputKey getKey(){
return okey;
}
/**
*
* 出力バリューのゲッターメソッド
* @return 出力キー
*/
OutputValue getValue(){
return ovalue;
}
/**
* Reduceフェーズの出力するキーとバリューを渡すメソッド
* reduceメソッド内で必ずemitメソッドを使用しなければならない.
* @param key 出力キー
* @param value 出力バリュー
*/
protected void emit(OutputKey key, OutputValue value){
this.okey = key;
this.ovalue = value;
}
/**
* Reduceフェーズの挙動を定義するメソッド
* 必ずemitメソッドを使用しなければならない。
*/
protected abstract void reduce();
}