我沒有清楚地瞭解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. ConnectableObservable vs flatMap()自引用?
- 4. Apache Spark:map vs mapPartitions?
- 5. 阿帕奇星火:地圖比較VS flatMap VS mapPartitions VS mapPartitionsWithIndex
- 6. Spring-ws VS Apache cxf VS Apache Axis2 VS Metro
- 7. Apache Spark vs Apache Ignite
- 8. Apache Spark vs Apache Spark 2
- 9. Apache vs Twisted
- 10. cloudera manager vs Apache
- 11. Velocity vs Apache Tiles
- 12. Netty vs Apache MINA
- 13. Apache Velocity $ vs $!{}
- 14. Postfix vs. Apache James
- 15. Apache Helix vs YARN
- 16. Apache-ssl vs mod_ssl
- 17. LiteSpeed vs Apache httpd
- 18. OpenAdaptor vs Apache Camel
- 19. XSOM vs Apache XmlSchema
- 20. Haskell FlatMap
- 21. apache to tomcat:mod_jk vs mod_proxy
- 22. Apache + mod_wsgi vs nginx + gunicorn
- 23. UnboundID vs Apache LDAP APIS
- 24. confluent platform vs apache kafka
- 25. Airbnb Airflow vs Apache Nifi
- 26. Apache commons Fileupload vs Tomcat.util.http.fileupload
- 27. Kafka Consumer Vs Apache Flink
- 28. Hortonworks vs Apache項目
- 29. Apache Phoenix vs Hive-Spark
- 30. Spring DriverManagerDataSource vs apache BasicDataSource
感謝費邊。所以一般來說mapPartition在性能方面應該比flatMap快嗎?正如你解釋mapParition收集整個分區,在這裏我有一個疑問,因爲我的理解,在flink中的map沒有取決於分裂,它取決於並行性。所以如果並行度低於不是。的分割比一些mapPartition將分配多個輸入分割。所以它作爲一個單一的可迭代收集的所有分割意味着多個分割創建一個輸入分區。 –
Flink中的拆分和分區不相同。運算符的每個並行實例處理一個分區,即分區可能由多個分割組成。 MapPartition不會**收集內存中的所有數據(除非您的用戶函數這樣做)。分區通過Iterable進行流式傳輸。它可能比flatMap更有效一些,但正如我所說的,你必須小心。如果你沒有明確地分割你的數據,結果可能是非確定性的。 –
太棒了。請給我詳細說明如何將分割分配給分區,如果我沒有明確分區我的數據,並且沒有.of分區與運算符的並行性相同。 –