Stream Storm中的字段和值连接
我在暴风雨中有一个基本问题。我能清楚地理解一些基本的事情。例如,我有一个主类,其中包含以下代码:Stream Storm中的字段和值连接,stream,field,tuples,apache-storm,Stream,Field,Tuples,Apache Storm,我在暴风雨中有一个基本问题。我能清楚地理解一些基本的事情。例如,我有一个主类,其中包含以下代码: ... TopologyBuilder builder = new TopologyBuilder(); builder.setSpout(SENTENCE_SPOUT_ID, new SentenceSpout()); builder.setBolt(SPLIT_BOLT_ID, new SplitSentenceBolt()).shuffleGrouping(SENTENCE_SPOU
...
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout(SENTENCE_SPOUT_ID, new SentenceSpout());
builder.setBolt(SPLIT_BOLT_ID, new SplitSentenceBolt()).shuffleGrouping(SENTENCE_SPOUT_ID);
builder.setBolt(COUNT_BOLT_ID, new WordCountBolt(), 3).fieldsGrouping(SPLIT_BOLT_ID, new Fields("word"));
builder.setBolt(REPORT_BOLT_ID, new ReportBolt()).globalGrouping(COUNT_BOLT_ID);
...
我知道1st元素(例如“句子喷嘴ID”)是螺栓/喷嘴的ID,以显示其中两个之间的连接。2nd元素(例如new sentencespoot())指定我们在拓扑中设置的喷动或粗体3rd元素标记此特定螺栓喷嘴所需的任务数量
然后,我们使用.Fields分组或.shufflegroup等来指定分组类型,然后在括号之间,1st元素是与接受输入的螺栓/喷嘴的连接,2nd(例如新字段(“word”)确定我们将分组的字段
在其中一个螺栓的代码内:
public class SplitSentenceBolt extends BaseRichBolt{
private OutputCollector collector;
public void prepare(Map config, TopologyContext context, OutputCollector collector) {
this.collector = collector;
}
public void execute(Tuple tuple) {
this.collector.emit(a, new Values(word, time, name));
}
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("word"));
}
}
在this.collector.emit(a,新值(字、时间、名称))
a是流的ID,值(…)是元组的元素
在declarer.declare(新字段(“word”))代码>单词必须是前面的值之一我之前的所有观点都正确吗?
所以我的问题是:在declarer.declare中(新字段(“word”)
word必须与此.collector.emit中的word相同(a,新值(字、时间、名称))代码>和builder.setBolt(COUNT_BOLT_ID,new word countbolt(),3)中的word相同。字段分组(SPLIT_BOLT_ID,new Fields(“word”)代码>??您在DeclareOutput字段中声明的字段的编号和顺序应与您发出的字段匹配
我建议做两个改变:
现在,通过省略第一个参数来使用默认流:collector.emit(新值(字、时间、名称))代码>
确保声明的字段数相同:declarer.declare(新字段(“单词”、“时间”、“名称”))代码>
所以,如果我理解正确,我必须有相同数量的元素和相同的顺序来发出(…)和声明(新字段(…),但我可以使用不同的名称?示例:collector.emit(新值(字、时间、名称));declarer.declare(新字段(“spittedward”、“timestamp”、“firstname”);。“我说得对吗?”普托奥拉那当然,如果你愿意,你可以这么做。