1.在scala中,对集合的fold操作:
val l=List(1,2,3)
val res=l.fold(10)(_+_)
结果res为16 这里的10为整个集合的初始值,只使用了一次
2.spark中rdd
val a=sc.makeRDD(List(1,2,3))
val res=a.fold(10)(_+_)
结果res为46 这里的10为集合中每个元素的初始值,每个元素在调用函数_+_之前都被加了10
注意区别
foldByKey同fold,但是前者反悔的是一个rdd,属于转换操作,后者返回值,属于行动操作
val b=sc.parallelize(List((1,2),(3,4),(3,6)))
val res=b.foldByKey(10)(_+_)
res foreach println
结果为(1,12) (3,30)