Spark高級算子aggregate所遇到的坑

val rdd3 = sc.parallelize(List("12","23","345","4567"),2)字符串

rdd3.aggregate("")((x,y) => math.max(x.length, y.length).toString, (x,y) => x + y)List

兩個分區先計算出字符串的最大長度,而後合成字符串並行

結果多是:」24」,也多是:」42」,體現了並行化特色。d3

 

val rdd4 = sc.parallelize(List("12","23","345",""),2)字符

rdd4.aggregate("")((x,y) => math.min(x.length, y.length).toString, (x,y) => x + y)d3

結果是:」10」,也多是」01」,math

緣由:注意有個初始值」」,其長度0,而後0.toString變成字符串。值"0".toString的長度爲0,"0".toString.length的長度爲1 。分區可能爲(「12」,「23」)和(「345」,「」);初始值爲"",而後初始值和「12」,「34」比較,或者是""和「345」比較,而後和「」比較。並行化

math.min("".length, "12".length ) 的結果是:0 , math.min("0".length, "23".length ) 的結果是1

math.min("".length, "345".length) 的結果是:0 , math.min("0".length, "".length)  的結果是:0  

 

val rdd5 = sc.parallelize(List("12","23","","345"),2)

rdd5.aggregate("")((x,y) => math.min(x.length, y.length).toString, (x,y) => x + y)

結果是:」11」,緣由以下:

math.min("".length, "12".length ) 的結果是:0 , math.min("0".length, "23".length ) 的結果是:1  

math.min("".length, "".length) 的結果是:0 , math.min("0".length, "345".length) 的結果是:1  

注意:值"0".toString的長度爲0,"0".toString.length的長度爲1

相關文章
相關標籤/搜索