Flink 默认使用哪些策略(散列、排序)对 DataSet 进行归约/分组(例如 groupBy 或归约函数)? Flink 使用了哪些 API 函数
- 在洗牌阶段进行分区
- 对分区内的元素进行排序
默认?
最佳答案
默认情况下,Flink 使用哈希分区和排序来执行 reduce 和 groupReduce 函数。在 reduce 或可组合的 groupReduce 的情况下,组合器也使用基于排序的策略执行。基于哈希的组合策略目前正在代码审查中,很快就会可用。 请注意,Flink 默认使用流水线洗牌。这意味着生产发送方任务和接收方排序器是同时执行的。
您可以像这样以不同的方式对数据集进行分区:
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
关于apache-flink - 弗林克 : Default Partitioning/Shuffling Strategy/Functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35754568/