从Flink的自定义分区中获取KeyedStream



我知道Flink自带自定义分区api。然而,问题是,在DataStream上调用partitionCustom后,您得到的是DataStream,而不是KeyedStream

另一方面,您不能覆盖KeyedStream的分区策略。

我确实想使用KeyedStream,因为DataStream的API没有reducesum操作符,并且因为自动分区的内部状态。

我的意思是,如果字数是:

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

我希望我能写:

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

有办法做到这一点吗?

谢谢!

从Flink的文档(从版本1.2.1开始)来看,分区器所做的是根据键对数据进行物理分区,只指定它们在机器中物理存储在分区中的位置,实际上没有逻辑上将数据分组到键流。要进行汇总,我们仍然需要使用"keyBy"操作符按键对它们进行分组,然后才允许进行"sum"操作。详情请参阅"https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html#physical-partitioning":)

相关内容

  • 没有找到相关文章