scala – rdd.collect().toMap与rdd.collectAsMap()之间的区别?
发布时间:2020-12-16 19:14:42 所属栏目:安全 来源:网络整理
导读:当我在RDD而不是rdd.collect().toMap上使用collectAsMap时是否会对性能产生影响? 我有一个键值rdd,我想转换为HashMap,因为我知道collect()在大型数据集上效率不高,因为它在驱动程序上运行我可以使用collectAsMap而不是有任何性能影响吗? 原版的: val Quot
当我在RDD而不是rdd.collect().toMap上使用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("(",""))) 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 } 因此,collect和collectAsMap之间没有性能差异,因为引擎盖下的collectAsMap调用也会收集. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |