Spark離線計算優化——leftOuterJoin優化

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章