如何在 Apache Flink 中对 GroupedDataSet 上的函数进行平面映射
How to flatMap a function on GroupedDataSet in Apache Flink
我想通过 flatMap
将函数应用到 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
或类似的。有没有类似的方法可以使用?如何在节点上单独实现每个组的所需分布式映射?
您可以使用reduceGroup(GroupReduceFunction f)
将所有元素处理成一个组。 GroupReduceFunction
为您提供一个组的所有元素的 Iterable
和一个 Collector
以发出任意数量的元素。
Flink 的 groupBy()
函数不会将多个元素组合成一个元素,即它不会转换一组 (Int, Int)
元素(它们共享相同的 _1
元组字段) 合并为一个 (Int, Array[Int])
。相反,DataSet[(Int, Int)]
在逻辑上被分组,这样具有相同键的所有元素都可以一起处理。当您在 GroupedDataSet
上应用 GroupReduceFunction
时,将为每个组调用一次该函数。在每次调用中,一个组的所有元素都一起交给函数。然后该函数可以处理该组的所有元素,并将一组 (Int, Int)
元素转换为单个 (Int, Array[Int])
元素。
我想通过 flatMap
将函数应用到 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
或类似的。有没有类似的方法可以使用?如何在节点上单独实现每个组的所需分布式映射?
您可以使用reduceGroup(GroupReduceFunction f)
将所有元素处理成一个组。 GroupReduceFunction
为您提供一个组的所有元素的 Iterable
和一个 Collector
以发出任意数量的元素。
Flink 的 groupBy()
函数不会将多个元素组合成一个元素,即它不会转换一组 (Int, Int)
元素(它们共享相同的 _1
元组字段) 合并为一个 (Int, Array[Int])
。相反,DataSet[(Int, Int)]
在逻辑上被分组,这样具有相同键的所有元素都可以一起处理。当您在 GroupedDataSet
上应用 GroupReduceFunction
时,将为每个组调用一次该函数。在每次调用中,一个组的所有元素都一起交给函数。然后该函数可以处理该组的所有元素,并将一组 (Int, Int)
元素转换为单个 (Int, Array[Int])
元素。