【问题标题】:Apache Flink: map vs flatMapApache Flink:地图与平面地图
【发布时间】:2020-04-13 18:49:01
【问题描述】:

在 flink 中,flatMap 也可以发出一条记录。看来 flatMap 可以代替地图。有人可以告诉我这种情况下的区别吗?谢谢。

【问题讨论】:

    标签: apache-flink


    【解决方案1】:

    如果您认为地图是多余的,那您是对的。 Flatmap 可以做 map 可以做的所有事情,甚至更多。

    尽管如此,我确实在输入和输出之间存在严格的一一对应关系的情况下使用 map。这向读者清楚地表明,例如,没有错误或无效输入会导致操作无法生成输出记录的情况。

    【讨论】:

    • 非常感谢!对我来说,最好使用 flatMap。因为我会给我公司的用户提供一个统一的端口。少即是简单。
    【解决方案2】:

    mapflatMap 的主要区别在于返回类型。 这两种方法都适用于 DataStream 和 DataSet 对象,并针对流或集合中的每个元素执行。

    但是,map 方法只返回一个元素,而 flatMap 返回一个集合(可以不包含、一个或多个元素)。

    • map 方法使用O out map(I elem) 方法接收接口MapFunction 的参数。输入是一个元素,输出是一个对象。
    • flatMap 方法使用void flatMap(I elem, Collector<O> out) 方法接收接口FlatMapFunction 的参数。输入是一个元素,输出是对象的集合。

    【讨论】:

      【解决方案3】:

      使用 map() 还可以轻松使用 lambda。例如,要将 Tuple2<Integer, String> 转换为 String,您可以这样做。

      .map(value -> value.f1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-16
        • 2018-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多