Apache Flink:MapPartition Vs. FlatMap

时间:2017-08-09 07:10:41

标签: hadoop apache-flink

我没有清楚地了解MapPartition。请有人解释一下Mappartition的一些用例以及它与FlatMap的不同之处?

2 个答案:

答案 0 :(得分:4)

区别在于方法的界面以及它们的调用方式。

  • FlatMapFunction为每条记录调用flatMap(IN val, Collector<OUT> out)方法,并为每条输入记录发出01或更多记录。因此,FlatMapFunction进程逐个记录。它不应该跨函数调用保持状态。
  • MapPartitionFunction的{​​{1}}方法只调用一次,并在所有分区上接收迭代器。它可以为整个分区发出mapPartition(Iterable<IN> vals, Collector<OUT> out)0或更多记录。因此,1可以(原则上)收集整个分区并计算结果。但是,如果分区很大,这可能很危险,因为您可以轻松地运行内存。如果首先对分区进行排序,mapPartition通常很有用。

因此,一般来说,MapPartitionFunction更通用,可以完成mapPartition所做的所有事情。然而,与许多强大的工具一样,你需要更加小心,因为你可以自己开枪。 flatMap界面更安全(通常更容易)使用。

答案 1 :(得分:0)

  

在Apache Flink中,您可以使用DataSetDataStream

flatMap是对两个

中任何一个记录的函数调用
.flatMap(new Tokenizer())  // calling on each record   
.flatMap(String value, Collector<Tuple2<String, Integer>> out) //definition

而,

mapPartition是每个分区上的一个map和for循环,直到Key的分区中的所有记录都被处理

  

DataStream在API中没有mapPartition

有关详细信息,请参阅this post