如果你的Driver内存容量不能容纳一个大型RDD里面的所有数据,那么不要做以下操作:
val values = iteblogVeryLargeRDD.collect()
Collect 操作会试图将 RDD 里面的每一条数据复制到Driver上,如果你Driver端的内存无法装下这些数据,这时候会发生内存溢出和崩溃。
相反,你可以调用take
或者 takeSample
来限制数据大小的上限。或者对你RDD中的数据使用过滤或抽样操作。
同样,要谨慎使用下面的操作,除非你能确保数据集小到足以存储在内存中:
countByKey countByValue collectAsMap
关于collectAsMap函数的使用可以参见Spark函数讲解:collectAsMap
如果你确实需要将 RDD 里面的大量数据保存在内存中,你可以将 RDD 成一个文件或者把RDD导出到一个容量足够大的数据库中。
本博客文章除特别声明,全部都是原创!原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【不要将大型RDD中所有元素发送到Driver端】(https://www.iteblog.com/archives/1364.html)