两个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操作。
总结:leftOuterJoin操作都需要进行方式1的优化,保证key唯一;如果leftOuterJoin操作本身消耗时间不长,直接使用leftOuterJoin即可(leftOuterJoin操作耗时 < 两次map+reduceByKey操作耗时),如果时间较长则选择方式2进行优化。