spark 是否会产生数据倾斜?
会的。比如单词统计,如果某个单词的量非常之巨大,聚合到同一个节点的时候它的数据就会非常大。这样就会发生数据倾斜。
解决办法
可以为 单词拼接 后缀 _x(x 为随机数)
这样混洗的时候 即使是同一个单词也会因为不同后缀的缘故分配到不同节点。
代码实现如下:
JavaPairRDD<String,Integer> rdd1 = sc.textFile(filePaht)
.flatMap( s -> Arrays.asList(s.split(" ")).iterator())
.filter(t->StringUtils.isNoneBlank(t))
.mapToPair(s -> new Tuple2<>(s+"_"+RandomUtils.nextInt(0,100), 1))
.reduceByKey((v1,v2)-> (v1+v2))
.mapToPair(t-> new Tuple2<>(t._1.substring(0,t._1.indexOf('_')), t._2))
.reduceByKey((v1,v2)-> (v1+v2));
rdd1.collect().forEach(t-> System.out.println(t + " " + Thread.currentThread()));
网友评论