【knowledgebase】不要在一个很大的RDD上调用collect

如果一个RDD很大以至于它的所有元素并不能在driver端机器的内存中存放下,请不要进行如下调用:

val values = myVeryLargeRDD.collect()

collect将尝试拷贝RDD中的每个元素到Driver端,容易导致OOM或者crash;

相反,如果你能通过调用take、takeSample、filter、sample等操作对返回的元素个数上限进行限制,再使用collect还是可以的;

查看RDD的collect方法源码:

def collect(): Array[T] = {
    val results = sc.runJob(this, (iter: Iterator[T]) => iter.toArray)
    Array.concat(results: _*)
}

注意:

countByKey、countByValue、collectAsMap操作在使用的时候也要注意数据集的大小能存放到内存中;

如果你确实想要知道RDD(数据非常大)中的每个元素,建议将RDD导出到文件、数据库中再进行查看。

countByKey、countByValue、collectAsMap方法源码:

PairRDDFunctions.scala
def countByKey(): Map[K, Long] = self.mapValues(_ => 1L).reduceByKey(_ + _).collect().toMap

def collectAsMap(): Map[K, V] = {
    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
}

RDD.scala
def countByValue()(implicit ord: Ordering[T] = null): Map[T, Long] = {
    map(value => (value, null)).countByKey()
}
时间: 2024-11-09 03:22:03

【knowledgebase】不要在一个很大的RDD上调用collect的相关文章

区块链技术很大程度上,会影响数字货币的发展

随着区块链技术的影响力逐渐的扩大,很多国家也逐渐的放松了对于数字加密货币的监管,更是有较多的国家,不但将区块链技术的研发提上了日程,更是在数字加密货币上也开始了布局. 区块链技术的最初应用和最成功的应用,都是比特币,但是比特币总量恒定,即使想要入局也只是通过交易或者挖矿的方式,比特币市场显然不能满足全球人民的需求,只能发行更多的代币,进行分散市场.更多的数字加密货币应势而出. 加拿大早在2016年就联合诸多银行合作推出了基于区块链技术的加元数字货币CAD-Coin,俄罗斯宣布将于2019年推出国

tensorflow 单机多GPU训练时间比单卡更慢/没有很大时间上提升

使用tensorflow model库里的cifar10 多gpu训练时,最后测试发现时间并没有减少,反而更慢 参考以下两个链接 https://github.com/keras-team/keras/issues/9204 https://medium.com/@c_61011/why-multi-gpu-training-is-not-faster-f439fe6dd6ec 原因可能是在cpu上进行参数梯度同步占每一步的很大比例 ‘’‘ It seems that CPU-side data

【转】使用缓存的9大误区(上)

原文连接 http://www.infoq.com/cn/articles/misunderstanding-using-cache 如果说要对一个站点或者应用程序经常优化,可以说缓存的使用是最快也是效果最明显的方式.一般而言,我们会把一些常用的,或者需要花费大量的资源或时间而产生的数据缓存起来,使得后续的使用更加快速. 如果真要细说缓存的好处,还真是不少,但是在实际的应用中,很多时候使用缓存的时候,总是那么的不尽人意.换句话说,假设本来采用缓存,可以使得性能提升为100(这里的数字只是一个计量

mysql5.6启动占用内存很大的解决方法

vps的内存为512M,安装好nginx,php等启动起来,mysql死活启动不起来看了日志只看到对应pid被结束了,后跟踪看发现是内存不足被killed; 调整my.cnf 参数,重新配置(系统默认配置太高直接占用400M内存,小玩家玩不起呢)即可 performance_schema_max_table_instances=200 table_definition_cache=200 table_open_cache=128 下面附一个相关的my.cnf配置文件的说明 [client] po

[转]使用缓存的9大误区(上)

如果说要对一个站点或者应用程序经常优化,可以说缓存的使用是最快也是效果最明显的方式.一般而言,我们会把一些常用的,或者需要花费大量的资源或时间而产生的数据缓存起来,使得后续的使用更加快速. 如果真要细说缓存的好处,还真是不少,但是在实际的应用中,很多时候使用缓存的时候,总是那么的不尽人意.换句话说,假设本来采用缓存,可以使得性能提升为100(这里的数字只是一个计量符号而已,只是为了给大家一个“量”的体会),但是很多时候,提升的效果只有80,70,或者更少,甚至还会导致性能严重的下降,这个现象在使

一盘很大的棋:Android Wear要做用户唯一的收件箱

在今年的Google I/O 2014上,Google用一组数据告诉了我们:"安卓月活跃用户达 10 亿,用户每天点亮.解锁手机 1000 亿次". 这么算下来,一个合格的安卓用户每天都要解锁100此次呀.亲,你及格了么?三分钟一次信息提醒,五分钟两次消息推送,一个强迫症怎么可能经受的住这种折磨呢?总有收到新消息的错觉,总有遗漏信息的幻觉,无数次的点亮.解锁手机就成了必修课. Google已经看到了智能手机时代的上述问题,不会让这样的问题再延续到智能手表上,想要借助新的工具和战场,真正

《Spring MVC学习指南》一书具有很大的欺骗性

2016年6月21日 最近,因为工作需要,我从网上买了一本<Spring MVC学习指南>,ISBN编号: 978-7-115-38639-7,定价:49.00元.此书是[美]Paul Deck著于2014年,林催二人于2015年翻译,2016年第6次印刷.我在淘宝上购买时就询问是哪个版本,店小二确实搞不清.我看了淘宝店此书的编辑推荐.目录.内容推荐,仍然看不出是哪个版本. 书买来,我稍微翻了一下,确认是基于Spring MVC 2.5的.这就问题大了,现在3.1版以后,方法完全不同变化很大,

一线城市拿地等于大冬天捧上暖宝宝?

一线城市拿地等于大冬天捧上暖宝宝? 行业动态投资时报杨科伟2014-11-16 07:31 我要分享 31 一线城市需求萎缩程度为所有城市中最高,复苏也最为缓慢,这使得商品住宅库存正大幅走高,消化周期持续拉长,去化风险逐步加大 来源:<投资时报> 文|杨科伟 近期,个别一二线城市高溢价地块频出,土地市场颇有“春江水暖鸭先知”之势. 不论是政府年底加快土地出让节奏,还是房企的存货不足,抑或是救市政策刺激,使得房企信心提振,土地市场看似阴霾渐散.尤其是今年以来,诸多二三四线城市库存压力凸显,房企为

android下大文件分割上传

由于android自身的原因,对大文件(如影视频文件)的操作很容易造成OOM,即:Dalvik堆内存溢出,利用文件分割将大文件分割为小文件可以解决问题. 文件分割后分多次请求服务. 1 //文件分割上传 2 public void cutFileUpload(String fileType,String filePath) 3 { 4 try 5 { 6 FileAccessI fileAccessI = new FileAccessI(filePath, 0); 7 Long nStartPo