2015-05-29 76 views
4

关于生成代理键,第一步是获取distinct,然后为每个元组构建一个增量键。Flink在distinct()中使用了哪些魔法?如何生成代理键?

因此,我使用Java Set来获取不同的元素,并且它没有堆空间。 然后,我使用Flink的distinct(),它完全有效。

请问是什么使这种差异?

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

回答

5

Flink在内部执行GroupBy后接ReduceGroup运算符,其中reduce运算符仅返回该组的第一个元素。

GroupBy通过排序数据完成。排序是在二进制数据表示上完成的(如果可能的话),但如果内存不足可能会溢出到磁盘。这blog post给出了一些有关这方面的见解。 GroupBySort在Flink中是内存安全的,并且不会因OutOfMemoryError而失败。

您还可以使用DataSet.distinct(KeySelector ks)对自定义密钥执行截然不同的操作。密钥选择器基本上是生成自定义密钥的MapFunction

相关问题