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

时间:2016-10-18 07:25:25

标签: apache-flink data-partitioning

我知道Flink带有自定义分区API。但问题是,在partitionCustom上调用DataStream后,您会得到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)

有没有办法实现这个目标?

谢谢!

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”:)