版权声明:本文为博主原创文章,转载请注明原博客地址。 https://blog.csdn.net/u012210441/article/details/80599345
有两个k-v格式的RDD需要union之后再进行reduceByKey操作(如:要将每日增量几十万的数据更新到全量几亿的数据)
优化方案:先将两个RDD公共部分提取出来,然后将公共部分先union再进行reduceByKey,最后将结果和前面没有交集的RDD相加(union)
具体做法:将较小的RDD1的key放入set并广播broadcast,然后将大的RDD2过滤filter出含该key较小RDD21和不含该key较大RDD22,再将RDD1与RDD21进行union-reduceByKey操作(增量数据更新全量数据),结果再union上RDD22。union和reduceByKey的操作的时候注意要reparation。
方案的思路:拿增量数据更新全量数据时,全量数据是不会每条记录都会被更新,只需要拿出需要更新的数据进行更新操作即可。两个大小差异较大的RDD进行union操作会进行大量shuffle,处理速度会很慢,filter之后两个较小的并且大小相似的RDD进行union就快的多(还是需要reparation,保证相同的合理的分区数);大的RDD的reducebykey操作也会很慢(因为存在大量shuffle)。