Apache flink 什么';s KeyedStream中max和maxBy之间的差异 KeyedStream#max(字符串字段)
应用提供数据当前最大值的聚合 通过给定的键在给定的字段表达式处执行流。独立的 每个键保留聚合。字段表达式可以是 公共字段或带有{@link括号的getter方法 DataStream}的基础类型。一个点可以用来深入到 对象,如{@code“field1.fieldxy”}Apache flink 什么';s KeyedStream中max和maxBy之间的差异 KeyedStream#max(字符串字段),apache-flink,Apache Flink,应用提供数据当前最大值的聚合 通过给定的键在给定的字段表达式处执行流。独立的 每个键保留聚合。字段表达式可以是 公共字段或带有{@link括号的getter方法 DataStream}的基础类型。一个点可以用来深入到 对象,如{@code“field1.fieldxy”} KeyedStream#maxBy(字符串字段) 应用为当前元素提供最大值的聚合 给定键在给定位置处的值。独立的集合体 每把钥匙都有。如果更多元素在给定位置具有最大值 默认情况下,运算符返回第一个位置 这两个API的javad
这两个API的javadoc看起来非常相似,我会问它们之间有什么区别,什么时候选择这一个或那一个,在详细介绍实现之前,我无法告诉您这些区别 让我们假设POJO记录的模式是(a:String,b:String,c:String) 最大值(字符串字段) maxBy(“a”)对于每个键,返回其字段“a”替换为每个键的最大值“a”的第一条记录 maxBy(字符串字段) max(“a”)返回最大字段为“a”的记录(如果有多条记录,则获取第一条记录) 有关详细信息,您可以检查。max和maxBy之间的关系是max返回最大值,而maxBy返回此字段中具有最大值的元素
keyedStream.max(0);
keyedStream.max("key");
keyedStream.maxBy(0);
keyedStream.maxBy("key");
在以下示例中,我们还可以看到不同之处:
使用:
谢谢@TiMr的帮助回答谢谢@bupt_ljy的帮助回答
// Create a Tumbling Window with the values of 1 day:
.timeWindow(Time.of(1, TimeUnit.DAYS))
// Use the max Temperature of the day:
.max("temperature")
// And perform an Identity map, because we want to write all values of this day to the Database:
.map(new MapFunction<elastic.model.LocalWeatherData, elastic.model.LocalWeatherData>() {
@Override
public elastic.model.LocalWeatherData map(elastic.model.LocalWeatherData localWeatherData) throws Exception {
return localWeatherData;
}
});
// Now take the Maximum Temperature per day from the KeyedStream:
DataStream<LocalWeatherData> maxTemperaturePerDay =
localWeatherDataByStation
// Use non-overlapping tumbling window with 1 day length:
.timeWindow(Time.days(1))
// And use the maximum temperature:
.maxBy("temperature");