二.Flink 流处理API之Transform

转换算子

1.map

 

DataStream<Integer> mapStram = dataStream.map(new MapFunction<String, Integer>() {
    public Integer map(String value) throws Exception {
        return value.length();
    }
});

2.flatMap

DataStream<String> flatMapStream = dataStream.flatMap(new FlatMapFunction<String, String>() {
    public void flatMap(String value, Collector<String> out) throws Exception {
        String[] fields = value.split(",");
        for( String field: fields )
            out.collect(field);
    }
});

flatMap算子和map有些相似,输入都是数据流中的每个元素,与之不同的是,flatMap的输出可以是零个、一个或多个元素,它的输出元素放在了Collector类对象中事实上,flatMap转换算子是filtermap的泛化。所以flatMap可以实现mapfilter算子的功能。

3. Filter

//3.过滤,取出30度以上的数据
SingleOutputStreamOperator<String> filter = fileDS.filter(new FilterFunction<String>() {
@Override
public boolean filter(String value) throws Exception {
double temp = Double.parseDouble(value.split(",")[2]);
return temp > 30.0D;
}
});
4. KeyBy

DataStream KeyedStream:逻辑地将一个流拆分成不相交的分区,每个分区包含具有相同key的元素,在内部以hash的形式实现的。

5.滚动聚合算子

 

这些算子可以针对KeyedStream的每一个支流做聚合。

 

sum()   min()  max()  minBy()  maxBy()

//分组
KeyedStream<SensorReading, Tuple> keydStream = sensorDS.keyBy("id");
//求每个传感器最高温度
SingleOutputStreamOperator<SensorReading> maxTemp = keydStream.max("temp");
SingleOutputStreamOperator<SensorReading> maxByTemp = keydStream.maxBy("temp")
6.Reduce

KeyedStream DataStream:一个分组数据流的聚合操作,合并当前的元素和上次聚合的结果,产生一个新的值,返回的流中包含每一次聚合的结果,而不是只返回最后一次聚合的最终结果。

7 .Split Select

Split

DataStream SplitStream:根据某些特征把一个DataStream拆分成两个或者多个DataStream

 

Select

SplitStreamDataStream:从一个SplitStream中获取一个或者多个DataStream

8.Connect CoMap

Connect

 

DataStream,DataStream ConnectedStreams:连接两个保持他们类型的数据流,两个数据流被Connect之后,只是被放在了一个同一个流中,内部依然保持各自的数据和形式不发生任何变化,两个流相互独立。

 

CoMap,CoFlatMap

ConnectedStreams → DataStream:作用于ConnectedStreams上,功能与mapflatMap一样,对ConnectedStreams中的每一个Stream分别进行mapflatMap处理。

 

9.Union

DataStream DataStream:对两个或者两个以上的DataStream进行union操作,产生一个包含所有DataStream元素的新DataStream

 

Connect Union 区别:

 

1Union之前两个流的类型必须是一样Connect可以不一样,在之后的coMap中再去调整成为一样的。

 

2. Connect只能操作两个流,Union可以操作多个。

 

 

 

 

 

 

 

 

 

 





 

 

posted @ 2020-11-29 11:48  huihui大数据  阅读(93)  评论(0编辑  收藏  举报