我在一个项目中使用twitter风暴,我有一个奇怪的问题。我有一个喷口,下一个代码是:
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打印的输出比从execute打印的要多得多。
你知道为什么吗?
1条答案
按热度按时间wvyml7n51#
我找到的唯一解决方案是在发送之前将hashmap转换为字符串,然后在bolt中将其转换回hashmap。