猿问

在 Esper 中从 CSV 读取事件

我正在尝试使用 CSVInputAdapter 从 CSV 读取几个事件,但我无法实现,这是我正在尝试的:


首先,我遵循了文档http://esper.espertech.com/release-7.1.0/esper-reference/html_single/index.html#gettingstarted 的第一步


我已经这样定义了 Person 事件:


public class PersonEvent {

    private String name;

    private int age;


    public PersonEvent() {

        this.name = "NONE";

        this.age = -1;

    }


    public PersonEvent(String name, int age) {

        this.name = name;

        this.age = age;

    }


    public String getName() {

        return name;

    }


    public int getAge() {

        return age;

    }

}

然后实例化服务,添加事件类型并创建一个语句和一个侦听器,以便每次接收到 PersonEvent 时,它都会打印此人的姓名和年龄:


EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider();

engine.getEPAdministrator().getConfiguration().addEventType(PersonEvent.class);

String epl = "select name, age from PersonEvent";

EPStatement statement = engine.getEPAdministrator().createEPL(epl);


statement.addListener((newData, oldData) -> {

            String name = (String) newData[0].get("name");

            int age = (int) newData[0].get("age");

            System.out.println(String.format("Name: %s, Age: %d", name, age));

        });

我测试了它发送一个简单的事件并且它有效


engine.getEPRuntime().sendEvent(new PersonEvent("Peter", 10));

这是输出


Name: Peter, Age: 10

当我尝试从 CSV 文件读取事件时出现问题,我的 CSV 如下所示:


name,age

John,3

Anne,4

这是我读取文件的方式:


    AdapterInputSource source = new AdapterInputSource(new File("/path/input.csv"));

    (new CSVInputAdapter(engine, source, "PersonEvent")).start();

这是我收到的输出:


Name: Peter, Age: 10

Name: NONE, Age: -1

Name: NONE, Age: -1

可以看到,我收到Peter的信息,通过发送一个简单的事件处理,还有两行CSV,还可以,但是没有数据。如果我做错了什么,你能帮我吗?非常感谢。


慕尼黑8549860
浏览 134回答 1
1回答

慕婉清6462132

可能是因为班级没有二传手?这可能是因为 JVM 没有为 Java 类上的方法定义任何顺序。第一个属性实际上可能是“年龄”而不是“姓名”。也尝试提供字段顺序。调试级别日志记录也可能对您有所帮助。
随时随地看视频慕课网APP

相关分类

Java
我要回答