表示查询结果中属性的错误序列

n6lpvg4x  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(358)

我是esper的新手,我正在研究storm esper collaboration。通过我的主类,我将查询发送到包含esper的bolt,而esper bolt将包含结果的元组发送到打印机bolt。我的问题是,尽管查询的结果在值方面是正确的,属性值的顺序不正确。例如,我有一个从飞行员表中选择属性的查询:姓名、姓氏、航空公司和我的结果的顺序应该相同get:name,航空公司,姓氏。我尝试了所有关于group by和order by的方法。我想在创建包含属性值的事件Map时一定是esper的错。我将主类代码和esper bolt代码粘贴到处理Map的位置。任何关于为什么会发生这种情况的想法都是非常受欢迎的!


**mainclass**

.addStatements(("insert into pilotStream " +
                "select * " +
                "from Log.win:time(120 second) A "))
.addStatements(("insert into employeeStream " +
                "select * " +
                "from Emp.win:time(120 second) A "))
.addStatements(("insert into CombinedEvent "+
                "select tick.pilotName as p_name , " +
                "tick.pilotSurname as p_surname , " +
                "tick.airline as p_airline " +
                "from pilotStream.win:time(120 second) as tick, " +
                "employeeStream.win:time(120 second) as rom "+ 
                "where tick.airline = rom.employeeAirline "+
              ))

**espebolt**

Map<String, Object> emap = (Map<String, Object>) newEvent.getUnderlying();
                    String Event_name = newEvent.getEventType().getName();
                    //System.out.println(Event_name);

                    for (Map.Entry<String, Object> entry : emap.entrySet()) {

                    //  String key =  entry.getKey();
                        String val = String.valueOf(entry.getValue()) ;
                        //System.out.println(key+" :"+val);
                        //System.out.println(val);

                        values.add(val);
                    }

                    collector.emit(Event_name, toTuple(newEvent, values, false));
                    values.removeAll(values);

结果应该是:来源:esper-print:2,stream:combinedevent,id:{},[约翰,斯诺,汉莎航空]相反,我get:source:埃斯珀-print:2,流:combinedevent,id:{},[约翰,汉莎航空,斯诺]
p、 totuple函数只是通过字符串的值列表获取属性的值,并将它们放入一个元组中,这个元组被发送到printerbolt。在espebolt代码中,有一些在注解中的打印帮助我看到问题出在esper内部创建的Map中。

xpcnnkqh

xpcnnkqh1#

默认情况下,esper生成Map事件。在设置配置或使用注解时,可以将其更改为对象数组事件。Map事件使用“hashmap”而不是“linkedhashmap”。“hashmap”在迭代键值对时没有顺序,但占用的内存要少得多。对象数组已排序。对于Map事件的有序访问,您可以从按顺序返回属性名的语句中获得“eventtype”。

相关问题