วิธีส่งสิ่งอันดับไปยัง blot ที่แตกต่างกันในพายุ

ทุกคน ฉันต้องการทำงาน—— พวยหนึ่งปล่อยตัวเลขไปที่ blotA และ BlotA ปล่อยเลขคี่ไปที่ Blot_odd BlotA ปล่อยเลขคู่ไปที่ Blot_even ฉันเลือกวิธีใช้ emit(streamId,tuple) แต่ฉันไม่รู้ว่าจะกำหนด streamId ของฉันที่ไหน

ใน Blot_odd / Blot_even

declareOutputFields(){declarer.declareStream("streamId", new Fields("fieldName"));}

และใน main จาก MyTopology.java

main() {
    TopologyBuilder builder = new TopologyBuilder();
    builder.setSpout("num", new NumSpout(), 10);
    builder.setBolt("judge", new Bolt(), 3).shuffleGrouping("num");
    builder.setBolt("odd", new Bolt_odd(), 2).shuffleGrouping("judge");
    builder.setBolt("even", new Bolt_even(), 2).shuffleGrouping("judge");
}

แต่ฉันล้มเหลว


person Fire    schedule 07.05.2015    source แหล่งที่มา
comment
โปรดระบุรหัสของคุณสำหรับ new Bolt(), new Bolt_odd() และ new Bolt_even()   -  person chandu kavar    schedule 07.05.2015


คำตอบ (1)


คุณสามารถทำได้เหมือนด้านล่าง

ในเมธอด ประกาศOutputFields ของ Bolt ให้กรอกรายละเอียดตามนี้

declarer.declareStream("oddstream", new Fields("fieldName"));
declarer.declareStream("evenstream", new Fields("fieldName"));

และคุณสามารถประกาศโทโพโลยีได้ดังนี้

builder.setSpout("num", new NumSpout(), 10);
builder.setBolt("judge", new Bolt(), 3).shuffleGrouping("num");
builder.setBolt("odd", new Bolt_odd(), 2).shuffleGrouping("judge", "oddstream");
builder.setBolt("even", new Bolt_even(), 2).shuffleGrouping("judge", "evenstream");
person Adrian Seungjin Lee    schedule 08.05.2015