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()));