當我在RDD上使用collectAsMap而不是rdd.collect().toMap時,是否會影響性能?rdd.collect().toMap和rdd.collectAsMap()之間的區別?
我有一個鍵值rdd,我想轉換爲HashMap,據我所知collect()在大數據集上效率不高,因爲它在驅動程序上運行,我可以使用collectAsMap而不是有任何性能影響?
原文:
val QuoteHashMap=QuoteRDD.collect().toMap
val QuoteRDDData=QuoteHashMap.values.toSeq
val QuoteRDDSet=sc.parallelize(QuoteRDDData.map(x => x.toString.replace("(","").replace(")","")))
QuoteRDDSet.saveAsTextFile(Quotepath)
變化:
val QuoteHashMap=QuoteRDD.collectAsMap()
val QuoteRDDData=QuoteHashMap.values.toSeq
val QuoteRDDSet=sc.parallelize(QuoteRDDData.map(x => x.toString.replace("(","").replace(")","")))
QuoteRDDSet.saveAsTextFile(Quotepath)
沒有顯着的性能差異。 'collectAsMap'僅收集'RDD'並在驅動程序上創建一個可變的'HashMap'。 – zero323
有沒有一種方法可以使用最佳實踐來創建hashmap?而不使用collectAsMap或collect().toMap? –
如果您希望重複密鑰,您可以通過首先刪除重複數據來減少傳輸到驅動程序的數據量,否則它會達到最佳效果。 – zero323