spark中groupbykey的低性能

Low performance of groupbykey in spark

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

假设您有一个 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)}