package storm.cookbook.tfidf.state;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import backtype.storm.tuple.Values;
import storm.trident.operation.TridentCollector;
import storm.trident.state.BaseStateUpdater;
import storm.trident.state.map.SnapshottableMap;
import storm.trident.tuple.TridentTuple;
@SuppressWarnings("rawtypes")
public class TfIdfUpdater extends BaseStateUpdater<SnapshottableMap> {
private static final long serialVersionUID = 1L;
@SuppressWarnings({ "unchecked" })
public void updateState(SnapshottableMap state, List<TridentTuple> tuples, TridentCollector collector) {
List<List<Object>> keys = new LinkedList<List<Object>>();
List<List<Object>> values = new LinkedList<List<Object>>();
for (TridentTuple tuple : tuples) {
List<Object> k = new ArrayList<Object>();
List<Object> v = new ArrayList<Object>();
k.add(tuple.getValueByField("documentId"));
k.add(tuple.getValueByField("term"));
v.add(tuple.getValueByField("tfidf"));
keys.add(k);
values.add(v);
}
state.multiPut(keys, values);
for (TridentTuple tuple : tuples) {
collector.emit(new Values(tuple.getValueByField("documentId"), tuple.getValueByField("term"),
tuple.getValueByField("tfidf")));
}
}
}