Apache Flink:DataSet API中groupBy和分区有什么区别?

时间:2017-11-12 14:06:39

标签: apache-flink

Flink的数据集API中有各种分区功能,例如partitionByHashpartitionByRange

我想了解首先是什么是分区,groupBy和分区之间有什么区别。

1 个答案:

答案 0 :(得分:5)

分区是比groupBy更低级别的操作,并且不对数据应用函数。它定义了如何跨并行任务实例分布数据。可以使用不同的方法对数据进行分区,例如散列分区或范围分区。

groupBy本身不是一个操作。它始终需要一个应用于分组DataSet的功能,例如reducegroupReducegroupCombinegroupBy API定义了记录在分配到相应函数之前的分组方式。记录分组分两步进行。

  1. 必须将具有相同分组键的所有记录移动到同一任务实例。这是通过分区数据完成的。由于通常存在比任务实例更多的不同分组键,因此任务实例必须处理具有不同分组键的记录。
  2. 必须在密钥上对同一任务实例中的所有记录进行分组。这通常通过对数据进行排序来完成。
  3. 因此,groupBy的第一步是分区。