rdd.collect().toMap与rdd.collectAsMap()之间的区别?

在我的RDD上使用collectAsMap而不是rdd.collect().toMap时,会不会影响性能?

我有一个键值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的实现如下

def collectAsMap(): Map[K, V] = self.withScope {
    val data = self.collect()
    val map = new mutable.HashMap[K, V]
    map.sizeHint(data.length)
    data.foreach { pair => map.put(pair._1, pair._2) }
    map
  }

因此, collectcollectAsMap之间没有性能差异,因为collectAsMap下的collectAsMap调用也会collect


没有不同。 尽可能避免使用collect(),因为它会破坏并行性的概念并收集驱动程序中的数据。

链接地址: http://www.djcxy.com/p/88359.html

上一篇: difference between rdd.collect().toMap to rdd.collectAsMap()?

下一篇: Using Google Maps offline (Js Api)