转换算子
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
转换算子是filter
和map
的泛化。所以flatMap
可以实现map
和filter
算子的功能。
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
SplitStream→DataStream:从一个SplitStream中获取一个或者多个DataStream。
8.Connect和 CoMap
Connect
DataStream,DataStream → ConnectedStreams:连接两个保持他们类型的数据流,两个数据流被Connect之后,只是被放在了一个同一个流中,内部依然保持各自的数据和形式不发生任何变化,两个流相互独立。
CoMap,CoFlatMap
ConnectedStreams → DataStream:作用于ConnectedStreams上,功能与map和flatMap一样,对ConnectedStreams中的每一个Stream分别进行map和flatMap处理。
9.Union
DataStream → DataStream:对两个或者两个以上的DataStream进行union操作,产生一个包含所有DataStream元素的新DataStream。
Connect与 Union 区别:
1. Union之前两个流的类型必须是一样,Connect可以不一样,在之后的coMap中再去调整成为一样的。
2. Connect只能操作两个流,Union可以操作多个。