1 创建RDD 分区数为2
scala> val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8,9),2)
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[2] at parallelize at :24
2
##(_+_,_+_) 先局部聚合 在全局聚合 意思是分区内部先求和 再把所有分区求和
scala> rdd1.aggregate(0)(_+_,_+_)
res2: Int = 45
3
##各个分区内的最大值求和
scala> rdd1.aggregate(0)(math.max(_,_),_+_)
res3: Int = 13
scala> val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8,9),3)
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[3] at parallelize at :24
scala> rdd1.aggregate(0)(math.max(_,_),_+_)
res4: Int = 18
##三个分区 一分区:123 二分区:456 三分区:789
##每一个分区内的最大值于括号里的初始值作比较
##3小于5 所以分区最大值为5 6和9大于5 所以5+6+9=20
##为什么最后结果是25 是因为它在全局叠加也会应用初始值(,_+_))
scala> rdd1.aggregate(5)(math.max(_,_),_+_)
res5: Int = 25
4
##与上面的不同是 集合里放的字符串
scala> val rdd2 = sc.parallelize(List("a","b","C","d","e","f"),2)
rdd2: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[4] at parallelize at :24
scala> rdd2.aggregate("")(_+_,_+_)
res6: String = defabC
##结果也可能是abcdef 为什么是俩种结果,是因为俩个分区有来个task 并行执行 不确定哪个task先返回