问题描述
val student=List((1,"akshay",60),(2,"salman",70),(3,"ranveer",50))
val student_rdd=sc.parallelize(student)
rdd1.reduce((a,b)=>(a._3+b._3)).collect
error: type mismatch;
found: Int
required: (Int,String,Int)
解决方法
您可以在减少之前映射值。其他列不是还原所必需的,应在还原前删除。
student_rdd.map(_._3).reduce(_+_)
,
有比使用 RDD 更好的方法,但是如果您想使用 reduce 一次性获得 sum、min、max、avg,那么这将起作用
val res = {
val a = student_rdd.map(r => (r._3,r._3,1))
.reduce((a,b) => (a._1 + b._1,Math.min(a._2,b._2),Math.max(a._3,b._3),a._4 + b._4))
a.copy(_4 = a._1 * 1.0 / a._4)
}
这为您提供了一个包含 (sum,min,max,avg) 的元组