在 Esper 中从 CSV 中读取事件
Reading Events from CSV in 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
如你所见,我收到了彼得的信息,通过发送一个简单的事件处理,以及两行CSV,这是可以的,但没有数据。如果我做错了什么,你能帮我吗?非常感谢。
可能是因为class没有二传手?
可能是因为 JVM 没有为 Java classes 上的方法定义任何顺序。第一个 属性 实际上可能是 'age' 而不是 'name.也尝试提供现场订单。调试级别的日志记录也可能对您有所帮助。
我正在尝试使用 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
如你所见,我收到了彼得的信息,通过发送一个简单的事件处理,以及两行CSV,这是可以的,但没有数据。如果我做错了什么,你能帮我吗?非常感谢。
可能是因为class没有二传手? 可能是因为 JVM 没有为 Java classes 上的方法定义任何顺序。第一个 属性 实际上可能是 'age' 而不是 'name.也尝试提供现场订单。调试级别的日志记录也可能对您有所帮助。