我对MapPartition没有清楚的了解。请有人解释一下Mappartition的用例,它与FlatMap有何不同?

最佳答案

不同之处在于方法的接口(interface)以及如何调用它们。

  • FlatMapFunctionflatMap(IN val, Collector<OUT> out)方法为每个记录调用,并且可以为每个输入记录发出01或更多记录。因此,FlatMapFunction进程一对一记录。它不应在函数调用之间保持状态。
  • MapPartitionFunctionmapPartition(Iterable<IN> vals, Collector<OUT> out)方法仅调用一次,并在所有分区上接收迭代器。它可以为整个分区发出01或更多记录。因此,MapPartitionFunction可以(原则上)收集整个分区并计算结果。但是,如果分区很大,这很危险,因为您很容易用光内存。如果首先对分区进行排序,则mapPartition通常很有用。

  • 因此,一般而言,mapPartition更通用,可以完成flatMap可以做的所有工作。但是,就像使用许多强大的工具一样,您需要更加小心,因为您可能会自己摔倒。 flatMap接口(interface)更安全(并且通常更容易使用)。

    10-01 06:36