关于flink的keyby问题和max问题

James~2 2019-12-16 10:53:33
StreamExecutionEnvironment env =StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<Tuple2<String,Integer>> ds =env.fromElements(Tuple2.of("tom", 12),Tuple2.of("jack", 20)
,Tuple2.of("rose", 18),Tuple2.of("tom",20),Tuple2.of("jack", 32)
,Tuple2.of("rose", 11),Tuple2.of("frank", 12),Tuple2.of("putin", 67)
,Tuple2.of("frank", 22),Tuple2.of("tom", 18),Tuple2.of("putin", 99)
,Tuple2.of("jack", 28),Tuple2.of("rose", 19),Tuple2.of("putin", 33)
,Tuple2.of("rose", 88),Tuple2.of("jack", 47),Tuple2.of("tom", 66));
KeyedStream<Tuple2<String,Integer>, String> ks =ds.keyBy(new KeySelector<Tuple2<String,Integer>, String>() {

@Override
public String getKey(Tuple2<String, Integer> value) throws Exception {
String key =value.f0;
return key;
}
});
System.out.println(Tuple2.of("rose", 18).f0.hashCode());
System.out.println(Tuple2.of("frank", 12).f0.hashCode());
//ks.print();
DataStream<Tuple2<String, Integer>> st =ks.max(1);
st.print();
最近刚学flink遇到个很疑惑的问题
请问 keyby分区后为何rose和frank分入一个区了?还有就是 keyby分区后调用max/min聚合为啥不是各个分区的最大值?
...全文
1176 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
再战300年 2021-04-23
  • 打赏
  • 举报
回复
我也挺疑惑的,你现在弄明白是咋回事了吗?
xiaxuepiaopiao 2020-04-16
  • 打赏
  • 举报
回复
keyby分区后调用max/min聚合为啥不是各个分区的最大值?假如输入有3条,max以后的结果也是3条,但是最后一条是max的结果。比如max(“score”),原来的score是99 98 100 97,那么输出的结果,就是99 99 100 100!看懂没!我解释一下,第一个99,由于max没有值,所以max为99,第二个97比99小,输出就为存储的max值99,第三个100比99大输出100。。。也就是他是一个迭代的过程。
yann.bai 2021-06-22
  • 举报
回复
@xiaxuepiaopiao 是的,那如何取消迭代过程只获取最终结果呢
小小练习生 2021-08-03
  • 举报
回复
@yann.bai collect

2,408

社区成员

发帖
与我相关
我的任务
社区描述
高性能计算
社区管理员
  • 高性能计算社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧