如何在Apache Flink中对GroupedDataSet上的函数进行flatMap

Wil*_*ler 8 hadoop scala apache-flink

我想将一个函数应用于flatMap生成的每个组DataSet.groupBy.试图调用flatMap我得到编译器错误:

error: value flatMap is not a member of org.apache.flink.api.scala.GroupedDataSet
Run Code Online (Sandbox Code Playgroud)

我的代码:

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
Run Code Online (Sandbox Code Playgroud)

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

Fab*_*ske 6

您可以reduceGroup(GroupReduceFunction f)用来处理组中的所有元素.A GroupReduceFunction为您提供Iterable了组的所有元素以及Collector发出任意数量的元素.

Flink的groupBy()函数不会将多个元素组合到一个元素中,也就是说,它不会将一组(Int, Int)元素(它们共享相同的_1元组字段)转换为一个元素(Int, Array[Int]).相反,a DataSet[(Int, Int)]在逻辑上被分组,使得具有相同密钥的所有元素可以一起处理.当您应用a GroupReduceFunctionGroupedDataSet,将为每个组调用一次该函数.在每次调用中,组中的所有元素都被一起传递给函数.然后,该函数可以处理该组的所有元素,并将一组(Int, Int)元素转换为单个(Int, Array[Int])元素.