package org.act.tstream.task.group;
import java.util.Iterator;
import java.util.List;
import backtype.storm.tuple.Fields;
import org.act.tstream.utils.JStormUtils;
/**
* field grouping
*
* @author yannian
*
*/
public class MkFieldsGrouper {
private Fields out_fields;
private Fields group_fields;
private List<Integer> out_tasks;
public MkFieldsGrouper(Fields _out_fields, Fields _group_fields,
List<Integer> _out_tasks) {
for (Iterator<String> it = _group_fields.iterator(); it.hasNext();) {
String groupField = it.next();
// if groupField isn't in _out_fields, it would throw Exception
_out_fields.fieldIndex(groupField);
}
this.out_fields = _out_fields;
this.group_fields = _group_fields;
this.out_tasks = _out_tasks;
}
public List<Integer> grouper(List<Object> values) {
int hashcode = this.out_fields.select(this.group_fields, values)
.hashCode();
int group = Math.abs(hashcode % this.out_tasks.size());
return JStormUtils.mk_list(out_tasks.get(group));
}
}