reduce join转换为map join适合在什么样的情况下,可以来使用?
如果俩个RDD要进行join,其中一个RDD是比较小的,一个RDD是1百万数据,一个RDD是1万数据
注意,其中一个RDD必须是比较小的,broadcast出去的那个小RDD的数据以后,就会在每个executor的block manager中都驻留一份,要确保你的内存足够存放那个小rdd中的数据
不适合的情况
俩个RDD都比较大,那么这个时候,你去将其中一个RDD做成broadcast,就比较笨拙,最终导致内存溢出
使用
reduce join转换为map jion
这是先进行一个广播变量
Boradcast<LIst<Tuple2<Long,Row>>> userInfosBroadcast = sc.broadcast(userInfos);
然后进行map
可以将普通信息转换为map键值对这种情况
对于join操作,不光是考虑倾斜的问题,即使没有没有数据倾斜的问题,也可以完全可以考虑,上述的方法,将reduce join转map join的技术,不要通过普通的join,进行shuffle,在可行的情况下,牺牲一点内存资源
不走shuffle,性能也是很可观的