在Esper中从CSV读取事件

时间:2018-09-30 18:06:29

标签: java csv esper

我正在尝试使用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的两行,这是可以的,但是没有数据。如果我做错了事,可以帮我吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

可能是因为该班没有二传手? 可能是因为JVM没有为Java类上的方法定义任何顺序。第一个属性实际上可能是“年龄”而不是“名称”。也尝试提供现场订单。调试级别的日志记录也可能对您有所帮助。