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

sri*_*ala 9 scala distributed-computing apache-spark

是否有任何性能的影响,当我在我的RDD使用collectAsMap代替rdd.collect().toMap的?

我有一个键值RDD,我要转换为HashMap类,据我所知收集()是没有效率的大型数据集,因为它运行在驱动程序我可以用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) 
Run Code Online (Sandbox Code Playgroud)

更改:

val QuoteHashMap=QuoteRDD.collectAsMap() 
val QuoteRDDData=QuoteHashMap.values.toSeq 
val QuoteRDDSet=sc.parallelize(QuoteRDDData.map(x => x.toString.replace("(","").replace(")",""))) 
QuoteRDDSet.saveAsTextFile(Quotepath)
Run Code Online (Sandbox Code Playgroud)

Til*_*ann 5

的实现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
  }
Run Code Online (Sandbox Code Playgroud)

因此,collect和之间没有性能差异collectAsMap,因为collectAsMap在后台也进行调用collect