spark中groupbykey的低性能

时间:2015-03-23 17:17:46

标签: apache-spark rdd

阅读Spark文档后,我发现groupByKey函数与reduceByKey相比性能较低。但我需要的是获取某个键的averagemaximumminimum值。我不认为这可以通过reduceByKey方法完成。我可以创建一个自定义的reduceByKey函数来实现这些目标吗?

1 个答案:

答案 0 :(得分:2)

假设您有一个RDD[(String, Double)],并且您希望使用reduceByKey计算双倍值的平均值,最小值,最大值。 这可以通过将值复制为您想要应用的操作多次,然后使用reduceByKey应用不同的操作来完成。

像这样:

val srcData:RDD[(String, Double)] = ???
srcData.cache
val count = srcData.count
val baseData = srcData.map{case (k,v) => (k,(v,1,v,v))}
val aggregates = baseData.reduceByKey { case (v1,v2) => 
    (v1._1 + v2._1, v1._2 + v2._2, Math.max(v1._3, v2._3), Math.min(v1._4,v2._4))}
val result = aggregates.collect()
            .map{case (id, (sum, count, max, min)) => (id, sum/count, max, min)}