2015-05-29 38 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

相關問題