两个k-v格式的RDD进行leftOuterJoin操作如果数据量较大复杂度较高的话计算可能会消耗大量时间。
可以通过两种方式进行优化:
1、leftOuterJoin操作前,两个RDD自身进行reduceByKey操作(保证key唯一);
2、两个RDD先map成结果k-v格式,再将两个RDD进行reduceByKey操作(避免使用leftOuterJoin操作),示例:
RDD1:(a, a1)
RDD2:(a, b1)
结果应该为(a,a1,b1)
优化过程:先通过map操作 RDD1(a, a1, '') RDD2(a, '', b1),进行reduceByKey操作得value取不为''的值,即可得到(a,a1,b1)
除了reduceByKey,其实也可以用groupByKey代替leftOuterJoin,但是groupByKey处理结果无法控制value顺序,性能也不如reduceByKey操作。
reduceByKey操作耗时),如果时间较长则选择方式2进行优化。