从flink中的自定义分区获取keyedstream

nc1teljy  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(396)

我知道flink带有定制的分区api。然而,问题是,调用 partitionCustomDataStream 你得到一个 DataStream 回来而不是 KeyedStream .
另一方面,不能重写 KeyedStream .
我确实想用 KeyedStream ,因为 DataStream 没有 reduce 以及 sum 运算符和,因为内部状态自动分区。
我是说,如果字数是:

words.map(s -> Tuple2.of(s, 1)).keyBy(0).sum(1)

我希望我能写:

words.map(s -> Tuple2.of(s, 1)).partitionCustom(myPartitioner, 0).sum(1)

有没有办法做到这一点?
谢谢您!

oknrviil

oknrviil1#

根据flink的文档(从版本1.2.1开始),分区者所做的是根据他们的密钥对数据进行物理分区,只指定他们在机器中物理地存储在分区中的位置,而实际上他们并没有将数据逻辑地分组到密钥流中。要做摘要,我们仍然需要使用“keyby”操作符按键对它们进行分组,然后才可以进行“sum”操作。详情请参阅“https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html#physical-分区“:)

相关问题