package edu.brown.benchmark.mapreduce.procedures;
import java.util.Iterator;
import org.voltdb.ProcInfo;
import org.voltdb.SQLStmt;
import org.voltdb.VoltMapReduceProcedure;
import org.voltdb.VoltTable;
import org.voltdb.VoltTableRow;
import org.voltdb.VoltType;
import edu.brown.utils.CollectionUtil;
@ProcInfo(
mapInputQuery = "mapInputQuery"
)
public class MockMapReduce extends VoltMapReduceProcedure<String> {
public SQLStmt mapInputQuery = new SQLStmt(
"SELECT A_NAME, COUNT(*) FROM TABLEA WHERE A_AGE >= ? GROUP BY A_NAME"
);
@Override
public VoltTable.ColumnInfo[] getMapOutputSchema() {
return new VoltTable.ColumnInfo[]{
new VoltTable.ColumnInfo("NAME", VoltType.STRING),
new VoltTable.ColumnInfo("COUNTER", VoltType.BIGINT),
};
}
@Override
public VoltTable.ColumnInfo[] getReduceOutputSchema() {
return new VoltTable.ColumnInfo[]{
new VoltTable.ColumnInfo("NAME", VoltType.STRING),
new VoltTable.ColumnInfo("COUNTER", VoltType.BIGINT),
};
}
@Override
public void map(VoltTableRow row) {
String key = row.getString(0); // A_NAME
Object new_row[] = {
key,
row.getLong(1)
};
this.mapEmit(key, new_row); // mapOutputTable
}
@Override
public void reduce(String key, Iterator<VoltTableRow> rows) {
long count = 0;
for (VoltTableRow r : CollectionUtil.iterable(rows)) {
assert(r != null);
long ct = (long)r.getLong(1);
count+=ct;
} // FOR
Object new_row[] = {
key,
count
};
this.reduceEmit(new_row);// reduceOutput table
}
}