代码
public class Test2_RollingAggregation {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment executionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment();
executionEnvironment.setParallelism(1);
DataStream<SensorReading> dataStream = executionEnvironment.fromCollection(Arrays.asList(
new SensorReading("sensor_1", 1547718199L, 35.8),
new SensorReading("sensor_6", 1547718201L, 15.4),
new SensorReading("sensor_7", 1547718202L, 6.7),
new SensorReading("sensor_6", 1547718203L, 15.9),
new SensorReading("sensor_10", 1547718205L, 38.1),
new SensorReading("sensor_6", 1547718206L, 15.1),
new SensorReading("sensor_6", 1547718209L, 15.0)
));
KeyedStream<SensorReading, Tuple> keyedStream = dataStream.keyBy("id");
SingleOutputStreamOperator<SensorReading> temperature = keyedStream.maxBy("temperature");
temperature.print();
executionEnvironment.execute();
}
}
输出:
SensorReading{id='sensor_1', timestamp=1547718199, temperature=35.8}
SensorReading{id='sensor_6', timestamp=1547718201, temperature=15.4}
SensorReading{id='sensor_7', timestamp=1547718202, temperature=6.7}
SensorReading{id='sensor_6', timestamp=1547718203, temperature=15.9}
SensorReading{id='sensor_10', timestamp=1547718205, temperature=38.1}
SensorReading{id='sensor_6', timestamp=1547718203, temperature=15.9}
SensorReading{id='sensor_6', timestamp=1547718203, temperature=15.9}
如将上述代码改为:
SingleOutputStreamOperator<SensorReading> temperature = keyedStream.maxBy("temperature");
输出:
SensorReading{id='sensor_1', timestamp=1547718199, temperature=35.8}
SensorReading{id='sensor_6', timestamp=1547718201, temperature=15.4}
SensorReading{id='sensor_7', timestamp=1547718202, temperature=6.7}
SensorReading{id='sensor_6', timestamp=1547718201, temperature=15.9}
SensorReading{id='sensor_10', timestamp=1547718205, temperature=38.1}
SensorReading{id='sensor_6', timestamp=1547718201, temperature=15.9}
SensorReading{id='sensor_6', timestamp=1547718201, temperature=15.9}
总结:maxBy会输出最大值所在的javaBean,而max不会输出最大值所在的JavaBean,而是直接替换第一次出现的对应位置上面的值。同理,min和mixBy也是这个道理。