加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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调用也会收集.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读