欢迎关注Hadoop、Spark、Flink、Hive、Hbase、Flume等大数据资料分享微信公共账号:iteblog_hadoop
  1. 文章总数:978
  2. 浏览总数:11,976,087
  3. 评论:3938
  4. 分类目录:106 个
  5. 注册用户数:6129
  6. 最后更新:2018年12月15日
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
iteblog_hadoop
大数据技术博客公众号bigdata_ai
大数据猿:
bigdata_ai

不要将大型RDD中所有元素发送到Driver端

  如果你的Driver内存容量不能容纳一个大型RDD里面的所有数据,那么不要做以下操作:

val values = iteblogVeryLargeRDD.collect()

  Collect 操作会试图将 RDD 里面的每一条数据复制到Driver上,如果你Driver端的内存无法装下这些数据,这时候会发生内存溢出和崩溃。

  相反,你可以调用take或者 takeSample来限制数据大小的上限。或者对你RDD中的数据使用过滤或抽样操作。

  同样,要谨慎使用下面的操作,除非你能确保数据集小到足以存储在内存中:

countByKey
countByValue
collectAsMap
  关于collectAsMap函数的使用可以参见Spark函数讲解:collectAsMap

  如果你确实需要将 RDD 里面的大量数据保存在内存中,你可以将 RDD 成一个文件或者把RDD导出到一个容量足够大的数据库中。

本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【不要将大型RDD中所有元素发送到Driver端】(https://www.iteblog.com/archives/1364.html)
喜欢 (4)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!