Apache flink Flink在distinct()中使用了什么魔法?代理密钥是如何生成的?

Apache flink Flink在distinct()中使用了什么魔法?代理密钥是如何生成的?,apache-flink,Apache Flink,关于生成代理键,第一步是获取distinct,然后为每个元组构建一个增量键 因此,我使用Java集合来获取不同的元素,这就占用了堆空间。 然后,我使用了Flink的distinct(),它完全有效 我能问一下这有什么不同吗 另一个相关的问题是,Flink可以在mapper中生成代理密钥吗 Flink以GroupBy的形式在内部执行distinct(),然后执行ReduceGroup操作符,其中reduce操作符仅返回组的第一个元素 GroupBy是通过对数据进行排序来完成的。排序是在二进制数据表

关于生成代理键,第一步是获取distinct,然后为每个元组构建一个增量键

因此,我使用Java集合来获取不同的元素,这就占用了堆空间。 然后,我使用了Flink的distinct(),它完全有效

我能问一下这有什么不同吗


另一个相关的问题是,Flink可以在mapper中生成代理密钥吗

Flink以
GroupBy
的形式在内部执行
distinct()
,然后执行
ReduceGroup
操作符,其中reduce操作符仅返回组的第一个元素

GroupBy
是通过对数据进行排序来完成的。排序是在二进制数据表示上进行的,如果可能的话,可以在内存中进行,但如果没有足够的内存可用,则可能溢出到磁盘。这给了我们一些见解
GroupBy
Sort
在Flink中是内存安全的,不会出现
OutOfMemoryError
故障

您还可以使用
DataSet.distinct(KeySelector ks)
对自定义键执行distinct。键选择器基本上是一个生成自定义键的
MapFunction