如果数据非常复杂,Tuple25还是不能装下的话,需要自定义bean
(keyBy也可以根据2个或者多个字段进行分组)
package org.myorg.quickstart;
public class OrderBean {
public String province;
public String city;
public double money;
public OrderBean() {
}
public OrderBean(String province, String city, double money) {
this.province = province;
this.city = city;
this.money = money;
}
public static OrderBean of(String province,String city,double money){
return new OrderBean(province,city,money);
}
@Override
public String toString() {
return "OrderBean{" +
"province='" + province + '\'' +
", city='" + city + '\'' +
", money=" + money +
'}';
}
}
package org.myorg.quickstart.stream;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;
import org.myorg.quickstart.OrderBean;
public class StreamWordCount {
public static void main(String[] args) throws Exception{
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<String> lines = env.socketTextStream("192.166.1.33", 9999);
SingleOutputStreamOperator<OrderBean> map = lines.map(new MapFunction<String, OrderBean>() {
@Override
public OrderBean map(String line) throws Exception {
String[] str = line.split(",");
return OrderBean.of(str[0],str[1],Double.parseDouble(str[2]));
}
});
SingleOutputStreamOperator<OrderBean> sum = map.keyBy("province","city").sum("money");
sum.print();
env.execute("test");
}
}