package resa.examples.outdet;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import resa.topology.RedisQueueSpout;
import java.util.Arrays;
import java.util.Collections;
/**
* Created by ding on 14-3-14.
*/
public class ObjectSpout extends RedisQueueSpout {
public static final String ID_FILED = "id";
public static final String VECTOR_FILED = "vector";
public static final String TIME_FILED = "time";
private final int objectCount;
public ObjectSpout(String host, int port, String queue, int objectCount) {
super(host, port, queue);
this.objectCount = objectCount;
}
@Override
protected void emitData(Object data) {
String[] tmp = ((String) data).split("[|]");
double[] v = Arrays.stream(tmp[2].split(",")).mapToDouble((str) -> Double.parseDouble(str)).toArray();
Integer objId = (int) (Long.parseLong(tmp[0]) % objectCount);
Long timestamp = Long.parseLong(tmp[1]);
collector.emit(new Values(objId, v, timestamp), Collections.singletonMap(objId, timestamp));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields(ID_FILED, VECTOR_FILED, TIME_FILED));
}
}