8

我想将函数 viaflatMap应用于由DataSet.groupBy. 尝试调用flatMap我得到编译器错误:

error: value flatMap is not a member of org.apache.flink.api.scala.GroupedDataSet

我的代码:

var mapped = env.fromCollection(Array[(Int, Int)]())
var groups = mapped.groupBy("myGroupField")
groups.flatMap( myFunction: (Int, Array[Int]) => Array[(Int, Array[(Int, Int)])] )  // error: GroupedDataSet has no member flatMap

事实上,在flink-scala 0.9-SNAPSHOT的文档中没有map列出或类似的。有没有类似的方法可以使用?如何在节点上单独实现每个组的所需分布式映射?

4

1 回答 1

7

您可以使用reduceGroup(GroupReduceFunction f)一个组来处理所有元素。AGroupReduceFunction给你一个Iterable组的所有元素和一个Collector发出任意数量的元素。

Flink 的groupBy()函数不会将多个元素组合成一个元素,即它不会将一组(Int, Int)元素(它们都共享相同的_1元组字段)转换为一个(Int, Array[Int])。相反,aDataSet[(Int, Int)]在逻辑上进行分组,以便可以一起处理具有相同键的所有元素。当您在 aGroupReduceFunction上应用 a 时GroupedDataSet,将为每个组调用一次该函数。在每次调用中,组中的所有元素都一起交给函数。然后,该函数可以处理组中的所有元素,并将一组(Int, Int)元素转换为单个(Int, Array[Int])元素。

于 2015-06-13T10:23:48.613 回答