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

Gan*_*h P 3 apache-flink

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

我想首先了解什么是分区,groupBy以及分区之间的区别。

Fab*_*ske 5

分区是比groupBy数据更底层的操作,并且不对数据应用任何功能。而是定义如何在并行任务实例之间分配数据。可以使用不同的方法对数据进行分区,例如哈希分区或范围分区。

groupBy本身不是一项操作。它总是需要被所分组的应用的功能DataSet,例如reducegroupReduce,或groupCombine。该groupByAPI定义了如何给他们到相应的函数之前的记录进行分组。记录分组分为两个步骤。

  1. 具有相同分组键的所有记录都必须移至相同的任务实例。这是通过对数据进行分区来完成的。由于通常有比任务实例更多的不同分组关键字,因此任务实例必须处理具有不同分组关键字的记录。
  2. 同一任务实例中的所有记录必须在键上分组。通常通过对数据进行排序来完成。

因此,第一步groupBy是分区。