一、实体类
@Data
public class Event {
public String user;
public String url;
public Long timestamp;
public Event(String user, String url, Long timestamp) {
this.user = user;
this.url = url;
this.timestamp = timestamp;
}
}
二、自定义数据源模拟流式数据
public class ClickSource implements SourceFunction<Event> {
//声明一个标志类
private Boolean running = true;
@Override
public void run(SourceContext<Event> ctx) throws Exception {
//随机生成数据
Random random = new Random();
//定义字段选取的数据集
String[] users = {"Mary","Alice","Bob","Cary"};
String[] urls = {"./home","./cart","./fav","./prod?id=100","./prod:id=10"};
//循环生成数据
while (running){
String user = users[random.nextInt(users.length)];
String url = urls[random.nextInt(user.length())];
Long time = System.currentTimeMillis();
ctx.collect(new Event(user,url,time));
Thread.sleep(2000);
}
}
@Override
public void cancel() {
running = false;
}
}
三、任务代码
public static void main(String[] args) throws Exception {
//创建执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//设置并行度
env.setParallelism(1);
//读取数据源
DataStreamSource<Event> dataStream = env.addSource(new ClickSource());
//进行转换操作 映射
SingleOutputStreamOperator<String> map = dataStream.map(new MapFunction<Event, String>() {
@Override
public String map(Event event){
if (event.user.equals("Bob")){
return "我是鲍勃";
}
return event.user;
}
});
//打印
map.print();
//开始
env.execute();
}