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