8

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

所以我使用 Java Set 来获取不同的元素,它的堆空间不足。然后,我使用了 Flink 的 distinct(),它完全可以工作。

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

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

4

1 回答 1

10

Flink 在distinct()内部执行 a 作为 aGroupBy后跟一个ReduceGroup运算符,其中 reduce 运算符仅返回组的第一个元素。

GroupBy是通过对数据进行排序来完成的。如果可能在内存中对二进制数据表示进行排序,但如果没有足够的可用内存,可能会溢出到磁盘。这篇博客文章对此提供了一些见解。GroupBy并且Sort在 Flink 中是内存安全的,不会因OutOfMemoryError.

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

于 2015-05-29T10:27:33.760 回答