关于生成代理键,第一步是获取不同的,然后为每个元组构建一个增量键。
所以我使用 Java Set 来获取不同的元素,它的堆空间不足。然后,我使用了 Flink 的 distinct(),它完全可以工作。
我能问一下有什么不同吗?
另一个相关的问题是,Flink 可以在 mapper 中生成代理键吗?
关于生成代理键,第一步是获取不同的,然后为每个元组构建一个增量键。
所以我使用 Java Set 来获取不同的元素,它的堆空间不足。然后,我使用了 Flink 的 distinct(),它完全可以工作。
我能问一下有什么不同吗?
另一个相关的问题是,Flink 可以在 mapper 中生成代理键吗?
Flink 在distinct()
内部执行 a 作为 aGroupBy
后跟一个ReduceGroup
运算符,其中 reduce 运算符仅返回组的第一个元素。
这GroupBy
是通过对数据进行排序来完成的。如果可能在内存中对二进制数据表示进行排序,但如果没有足够的可用内存,可能会溢出到磁盘。这篇博客文章对此提供了一些见解。GroupBy
并且Sort
在 Flink 中是内存安全的,不会因OutOfMemoryError
.
您还可以通过使用对自定义键执行不同的操作DataSet.distinct(KeySelector ks)
。键选择器基本上是MapFunction
生成自定义键的。