如何对 spark scala RDD 中的 list/array 元组执行转换?
How to perform transformations on list/array of tuples in spark scala RDD?
我有一个元组列表 - 如何对每个元组的整数值执行归约?
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 在一次传递中获得总和、最小值、最大值、平均值,那么这会起作用
val res = {
val a = student_rdd.map(r => (r._3, 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)
我有一个元组列表 - 如何对每个元组的整数值执行归约?
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 在一次传递中获得总和、最小值、最大值、平均值,那么这会起作用
val res = {
val a = student_rdd.map(r => (r._3, 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)