Java 提高groupReduce变换的并行化程度

Java 提高groupReduce变换的并行化程度,java,apache-flink,Java,Apache Flink,在我的Flink程序中,我使用flatMap操作转换数据,该操作将多个数据块划分为多个较小的块。这些块具有一个“位置”属性,该属性描述它们在各自原始块中的位置。现在我使用一个groupReduce,它需要转换所有共享相同“位置”属性的小块。因此,它应该可以轻松地分布在多个节点上。但是,当我在多个节点上运行程序时,groupReduce将以dop为1执行 我想这是因为我只有一个数据集,但在Flink Java API中似乎没有组数据集。是否有另一种可能来提高mygroupReduce转换的dop

在我的Flink程序中,我使用
flatMap
操作转换数据,该操作将多个数据块划分为多个较小的块。这些块具有一个“位置”属性,该属性描述它们在各自原始块中的位置。现在我使用一个
groupReduce
,它需要转换所有共享相同“位置”属性的小块。因此,它应该可以轻松地分布在多个节点上。但是,当我在多个节点上运行程序时,
groupReduce
将以dop为1执行

我想这是因为我只有一个
数据集
,但在Flink Java API中似乎没有
组数据集
。是否有另一种可能来提高my
groupReduce
转换的dop

下面是我正在使用的代码(忽略“细节”的伪代码):

DataSet slicedTiles=tiles.flatMap()
.groupBy(职位)
.sortGroup(时间)
.getDataSet()
//在此之前,dop是正确的
DataSet ProcessedSlicedFiles=SlicedFiles.reduceGroup;

代码的问题是
getDataSet()
调用。它返回分组操作的输入。因此,
slicedTiles
表示的数据集既不分组也不排序,而是
flatMap
转换的结果,
groupBy
sortGroup
调用在程序中根本不被考虑

对非分组数据集应用
groupReduce
(或
reduce
)操作始终是非并行操作,因为输入数据集的所有元素都作为单个组处理

从逻辑上讲,三个转换
groupBy().sortGroup().reduceGroup()
属于一起,并被转换为一个
groupReduce
运算符(如果
GroupReduceFunction
可组合,则可以使用额外的组合器)

如果您按照以下方式更改实现,那么它应该可以按预期工作

DataSet<SlicedTile> slicedTiles = tiles.flatMap()
    .groupBy(position)
    .sortGroup(time)
    .reduceGroup(yourFunction);
DataSet slicedTiles=tiles.flatMap()
.groupBy(职位)
.sortGroup(时间)
.还原组(函数);
我将打开一个JIRA问题,将JavaDocs添加到
Grouping.getDataSet()
方法中,以记录此函数的行为

DataSet<SlicedTile> slicedTiles = tiles.flatMap()
    .groupBy(position)
    .sortGroup(time)
    .reduceGroup(yourFunction);