我知道Flink带有自定义分区API。但问题是,在partitionCustom
上调用DataStream
后,您会得到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)
有没有办法实现这个目标?
谢谢!
答案 0 :(得分:0)
从Flink的文档(从版本1.2.1开始),分区程序所做的是对数据进行物理分区,只是在机器中物理分配存储在分区中的位置,这实际上没有对数据进行逻辑分组键入流。要进行汇总,我们仍然需要使用“keyBy”运算符按键对它们进行分组,然后我们可以进行“求和”运算。 详情请参阅“https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/datastream_api.html#physical-partitioning”:)