scala - 如何在 Apache Flink 中对 GroupedDataSet 上的函数进行平面映射

标签 scala hadoop 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]) 元素。

关于scala - 如何在 Apache Flink 中对 GroupedDataSet 上的函数进行平面映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30817449/

相关文章:

scala - 每个列值的 Spark 计数和百分比异常处理和加载到 Hive DB

scala - Scala 中的模式匹配 Jackson JSON

apache - 无法实例化 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

hadoop - 如何使用一个 reducer 的输出作为另一个映射器的输入?

bigdata - 弗林克+卡夫卡: Why am I losing messages?

scala - 暴露来自单例类型的路径依赖类型

方法参数中的 Scala 映射无法添加键值

hadoop - 如何将我的 Hbase 表(很大)分成相等的部分,以便我可以将它存储到本地文件系统中?

apache-flink - 弗林克 : Memory Usage

apache-flink - Flink 中 Lookup 和 Processing Time Temporal join 有什么区别?