package com.github.stakafum.mapreduce;
import java.util.*;
/*
* MapReduceのMapフェーズを取り扱うクラス
* アプリの開発者がMapフェーズを扱うときはこのクラスのサブクラスでmapメソッドだけを記述すれば良い。
* @param <InputKey> Mapフェーズの入力キーのクラス
* @param <InputValue> Mapフェーズの入力バリューのクラス
* @param <InputKey> Mapフェーズの出力キーのクラス
* @param <InputKey> Mapフェーズの出力バリューのクラス
*/
public abstract class Mapper <InputKey, InputValue, OutputKey, OutputValue> {
/*
*@param ikey 入力キー
*@param ivalue 入力キー
*@param okey 出力されるキー
*@param ovalue 出力されるバリュー
*
* okeyとovalueはリストであり同じ組のキーバリューは同一のインデックスに格納されている。
*/
private InputKey ikey;
private InputValue ivalue;
private List<OutputKey> okeys;
private List<OutputValue> ovalues;
protected Mapper(){
this.okeys = new ArrayList<OutputKey>();
this.ovalues = new ArrayList<OutputValue>();
}
Mapper(InputKey key, InputValue value){
this.ikey = key;
this.ivalue = value;
this.okeys = new ArrayList<OutputKey>();
this.ovalues = new ArrayList<OutputValue>();
}
/*
* 入力のキーとバリューのセッターメソッド
* @param key 入力キー
* @param value 入力バリュー
*/
void setKeyValue(InputKey key, InputValue value){
this.ikey = key;
this.ivalue = value;
}
/*
* 入力キーのゲッターメソッド
* サブクラスではこのメソッドを使い入力キーを獲得する。
*/
protected InputKey getInputKey(){
return this.ikey;
}
/*
* 入力バリューのゲッターメソッド
* サブクラスではこのメソッドを使い入力バリューを獲得する。
*/
protected InputValue getInputValue(){
return this.ivalue;
}
/*
* 出力キーのゲッターメソッド
*/
List<OutputKey> getKeys(){
return this.okeys;
}
/*
* 出力バリューのゲッターメソッド
*/
List<OutputValue> getValues(){
return this.ovalues;
}
/*
* Mapフェーズの出力するキーとバリューを渡すメソッド
* mapメソッド内で必ずemitメソッドを使用しなければならない.
* @param key 出力キー
* @param value 出力バリュー
*/
protected void emit(OutputKey okey, OutputValue ovalue){
this.okeys.add(okey);
this.ovalues.add(ovalue);
}
/*
* Mapフェーズの挙動を定義するメソッド
* 必ずemitメソッドを使用しなければならない。
*/
protected abstract void map();
}