默认情况下,Flink使用哪种策略(散列,排序)来减少/分组DataSet(例如groupBy或reduce函数)?以及Flink用于
的API函数默认情况下?
答案 0 :(得分:5)
默认情况下,Flink使用散列分区和排序来执行reduce和groupReduce函数。在reduce或可组合的groupReduce的情况下,组合器也使用基于排序的策略来执行。基于哈希的组合策略目前正在进行代码审查,很快就会推出。 请注意,Flink默认使用流水线shuffle。这意味着生成发送方任务和接收方侧分拣机同时执行。
您可以使用以下不同方式对数据集进行分区:
val data: DataSet[(String, Int)] = ...
data.partitionByHash(0) // hash-partitions on String field
data.partitionByRange(1) // range-partitions on Int field (w/ online sampling overhead)
data.partitionCustom(new MyPartitioner(), 0) // use a custom function to partition on String field
您可以在本地对分区进行排序,如下所示:
val data: DataSet[(String, Int)] = ...
data.sortPartition(0, Order.ASCENDING) // sorts partitions on String field in ascending order