我没有清楚地了解MapPartition。请有人解释一下Mappartition的用例以及它与FlatMap的不同之处?Apache Flink:MapPartition VS. FlatMap
1
A
回答
3
区别在于方法的接口以及它们如何被调用。
FlatMapFunction
的flatMap(IN val, Collector<OUT> out)
方法被称为对于每个记录,并且可以发射0
,1
,或多个记录对于每个输入记录。因此,一个FlatMapFunction
进程记录一个接一个。它不应该在函数调用中保持状态。MapPartitionFunction
的mapPartition(Iterable<IN> vals, Collector<OUT> out)
方法被调用一次,并接收所有分区的迭代器。它可以为整个分区发出0
,1
或更多记录。因此,MapPartitionFunction
可以(原则上)收集整个分区并计算结果。但是,如果分区很大,这可能很危险,因为您可以轻松地运行内存不足。如果首先对分区进行排序,mapPartition通常很有用。
因此,一般而言,mapPartition
是更通用的,可以做所有flatMap
所做的一切和更多。然而,就像许多强大的工具一样,你需要更加小心,因为你可以在脚下自己射击。接口更安全(通常更易于使用)。
0
在Apache中弗林克您可以在任一
DataSet
或DataStream
flatMap
是在任的两个
.flatMap(new Tokenizer()) // calling on each record
.flatMap(String value, Collector<Tuple2<String, Integer>> out) //definition
,而每条记录的函数调用行为,
mapPartition
是一个映射,并在每个分区上循环,直到参数中的所有记录天信一键处理
的数据流中没有可用mapPartition的API
在欲了解更多信息请阅读说明this post
相关问题
- 1. Apache Beam:FlatMap vs Map?
- 2. Apache Beam中的ParDo与FlatMap?
- 3. Spring-ws VS Apache cxf VS Apache Axis2 VS Metro
- 4. Apache Helix vs YARN
- 5. Apache Velocity $ vs $!{}
- 6. Apache vs Twisted
- 7. Velocity vs Apache Tiles
- 8. LiteSpeed vs Apache httpd
- 9. Netty vs Apache MINA
- 10. Apache-ssl vs mod_ssl
- 11. Haskell FlatMap
- 12. Hortonworks vs Apache项目
- 13. confluent platform vs apache kafka
- 14. Apache Phoenix vs Hive-Spark
- 15. apache to tomcat:mod_jk vs mod_proxy
- 16. apache poi vs python xlrd
- 17. 为什么Apache Beam中的GroupByKey之后的FlatMap如此之慢?
- 18. ParallelFlux vs flatMap()用于阻塞I/O任务
- 19. 压平Vs的flatMap与DEF方法和Val函数
- 20. 未来flatMap
- 21. 使用flatMap
- 22. 从内flatMap
- 23. Rxjava2通过flatMap
- 24. Apache TomEE vs JBoss EAP vs WildFly? OTMM
- 25. 性能测试Apache vs NodeJs
- 26. Apache MINA vs Netty for Android
- 27. Apache Avro for c#vs Microsoft.Avro.Core
- 28. Apache Commons Pool LIFO vs FIFO
- 29. apache camel split()vs split(body())
- 30. php artisan vs apache/nginx for production
感谢费边。所以一般来说mapPartition在性能方面应该比flatMap快吗?正如你解释mapParition收集整个分区,在这里我有一个疑问,因为我的理解,在flink中的map没有取决于分裂,它取决于并行性。所以如果并行度低于不是。的分割比一些mapPartition将分配多个输入分割。所以它作为一个单一的可迭代收集的所有分割意味着多个分割创建一个输入分区。 –
Flink中的拆分和分区不相同。运算符的每个并行实例处理一个分区,即分区可能由多个分割组成。 MapPartition不会**收集内存中的所有数据(除非您的用户函数这样做)。分区通过Iterable进行流式传输。它可能比flatMap更有效一些,但正如我所说的,你必须小心。如果你没有明确地分割你的数据,结果可能是非确定性的。 –
太棒了。请给我详细说明如何将分割分配给分区,如果我没有明确分区我的数据,并且没有.of分区与运算符的并行性相同。 –