我知道Flink自带自定义分区api。然而,问题是,在DataStream
上调用partitionCustom
后,您得到的是DataStream
,而不是KeyedStream
。
另一方面,您不能覆盖KeyedStream
的分区策略。
我确实想使用KeyedStream
,因为DataStream
的API没有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)
有办法做到这一点吗?
谢谢!
从Flink的文档(从版本1.2.1开始)来看,分区器所做的是根据键对数据进行物理分区,只指定它们在机器中物理存储在分区中的位置,实际上没有逻辑上将数据分组到键流。要进行汇总,我们仍然需要使用"keyBy"操作符按键对它们进行分组,然后才允许进行"sum"操作。详情请参阅"https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html#physical-partitioning":)