【问题标题】:How to flatMap a function on GroupedDataSet in Apache Flink如何在 Apache Flink 中对 GroupedDataSet 上的函数进行平面映射
【发布时间】:2015-06-13 10:08:53
【问题描述】:

我想通过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 或类似内容。有没有类似的方法可以使用?如何在节点上单独实现对每个组的期望分布式映射?

【问题讨论】:

    标签: scala hadoop apache-flink


    【解决方案1】:

    您可以使用reduceGroup(GroupReduceFunction f) 处理一个组的所有元素。 GroupReduceFunction 为您提供组中所有元素的 IterableCollector 以发出任意数量的元素。

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

    【讨论】:

    • 这不是和GroupCombineFunction一样吗?
    猜你喜欢
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多