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进行优化。

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