我在项目中使用Twitter Storm,我有一个奇怪的问题。 我有一个带有以下nextTuple代码的喷口:
public void nextTuple()
{
HashMap cluster = this.databaseManager.getCluster();
System.out.println("emitted: " + cluster);
this.collector.emit(new Values(cluster));
}
使用以下执行连接到此喷口的螺栓:
public void execute(Tuple tuple)
{
HashMap<String, List<String>> unigrams = (HashMap)tuple.getValueByField("unigrams");
System.out.println("received: " + unigrams);
}
发出的东西应该与收到的东西相同吗? 所以首先输出显示:
emitted: {218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}
received: {218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}
(数据意味着什么不重要,重点是发射和接收它)。 但是,当发射变化时,收到的是相同的:
emitted: {13788873=[aa2ec732b5b64b25be81abe79d2176bb], 2293158=[aa2ec732b5b64b25be81abe79d2176bb], 218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}
received: {218460=[04ef110987074dc6b3e3174b9f57d980], 1702472=[04ef110987074dc6b3e3174b9f57d980]}
我正在敲打为什么它在第二种情况下不起作用。 此外,输出从nextTuple打印的次数远多于执行时的输出。
为什么会这样?
答案 0 :(得分:0)
我发现找到的唯一解决方案是在发送之前将HashMap转换为字符串,然后将其转换回螺栓中的HashMap。