Scala KeyedState的KeyBy None

Scala KeyedState的KeyBy None,scala,state,apache-flink,Scala,State,Apache Flink,编辑:我刚刚发现Java中存在一个类:NullByteKeySelector,允许对非键控用例使用键控运算符 在Flink HTM库的一个示例中,我可以阅读: .keyBy{{u=>None} .mapWithState{…} 我正试图用Java做同样的事情。由于mapWithState只是Scala的一种语法糖,因此我尝试在Flink Java MappingFunction中注册通常的状态处理,但是,我不知道如何处理keyBy 在这种情况下,流只是时间戳和数字的时间序列元组。我尝试通过时间

编辑:我刚刚发现Java中存在一个类:NullByteKeySelector,允许对非键控用例使用键控运算符


在Flink HTM库的一个示例中,我可以阅读:

.keyBy{{u=>None} .mapWithState{…}

我正试图用Java做同样的事情。由于mapWithState只是Scala的一种语法糖,因此我尝试在Flink Java MappingFunction中注册通常的状态处理,但是,我不知道如何处理keyBy

在这种情况下,流只是时间戳和数字的时间序列元组。我尝试通过时间戳、标量和两者来设置关键帧,以便强制将流转换为keyedStream,因此我可以像原始示例中那样使用keyedstate。 结果是,在下一步中,注册状态将始终为NULL,如果我理解正确,这是有意义的,因为键始终是唯一的,并且根本没有发生分区(不确定这一点)

接下来我尝试通过切换到操作员状态而不是键控状态来保持状态,但在这种情况下,状态是通过检查点来保持的,检查点按照检查点策略中的定义发生,这有时会给我带来不希望的副作用

我真的很想用键控状态将其组合在一起,有人能给我举例说明一下:

  • Scala版本中“无”键控的作用是什么?如果有可能在Java中实现等价物

当您通过某些始终唯一的东西进行键控时,实际上您就是分区。分区非常小——每个分区都有一个事件。这使得键控状态不是很有用,除非您还使用计时器


无键控与常数键控相同。没有分区,所以并行度不能大于1,但可以使用键控状态和计时器

谢谢大卫的启发!我刚刚用常量强制了一个键选择器,现在我可以使用keyed state:))非常感谢!