【发布时间】:2020-04-13 18:49:01
【问题描述】:
在 flink 中,flatMap 也可以发出一条记录。看来 flatMap 可以代替地图。有人可以告诉我这种情况下的区别吗?谢谢。
【问题讨论】:
标签: apache-flink
在 flink 中,flatMap 也可以发出一条记录。看来 flatMap 可以代替地图。有人可以告诉我这种情况下的区别吗?谢谢。
【问题讨论】:
标签: apache-flink
如果您认为地图是多余的,那您是对的。 Flatmap 可以做 map 可以做的所有事情,甚至更多。
尽管如此,我确实在输入和输出之间存在严格的一一对应关系的情况下使用 map。这向读者清楚地表明,例如,没有错误或无效输入会导致操作无法生成输出记录的情况。
【讨论】:
map 和flatMap 的主要区别在于返回类型。
这两种方法都适用于 DataStream 和 DataSet 对象,并针对流或集合中的每个元素执行。
但是,map 方法只返回一个元素,而 flatMap 返回一个集合(可以不包含、一个或多个元素)。
map 方法使用O out map(I elem) 方法接收接口MapFunction 的参数。输入是一个元素,输出是一个对象。 flatMap 方法使用void flatMap(I elem, Collector<O> out) 方法接收接口FlatMapFunction 的参数。输入是一个元素,输出是对象的集合。 【讨论】:
使用 map() 还可以轻松使用 lambda。例如,要将 Tuple2<Integer, String> 转换为 String,您可以这样做。
.map(value -> value.f1)
【讨论】: