兩個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進行優化。