spark action常用算子类型如下:
1.aggregate [U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U): U:算子中参数zeroValue是初始值;seqOp是分区内Task的执行逻辑,首先是zeroValue与分区内的第一个元素业务逻辑操作再依次与剩余元素进行同样操作,最后还回与zeroValue一样的类型;combOp是把各个分区的结果聚集到一起进行逻辑业务操作,起始也是由zeroValue于第一个分区业务逻辑操作再依次与剩余分区业务逻辑操作,输入与输出类型都与zeroValue类型一致。
/**
* 初始值与分区内每个元素合并
*
* @param a
* @param b
* @return
*/
def seqOp(a: String, b: Int): String = {
a + b
}
/**
* 各个分区结果合并
*
* @param a
* @param b
* @return
*/
def combOp(a: String, b: String): String = {
a + b
}
val rdd = sc.parallelize(List(1, 2, 3, 4, 5, 6), 2)
val rdd2 = rdd.aggregate("-")(seqOp, combOp)
结果如下:--123-456
说明:zeroValue先在每个分区与元素业务逻辑操作,再与各个分区结果依次操作,2个分区故结果有3个-
未完待续