Performance spark reduceByKey使用scala减少列表时的性能/复杂性
我需要对列表执行Performance spark reduceByKey使用scala减少列表时的性能/复杂性,performance,scala,apache-spark,rdd,Performance,Scala,Apache Spark,Rdd,我需要对列表执行reduceByKey。什么是最快的解决方案?我正在使用::操作符在reduce操作中合并2个列表,但是::是O(n),所以我担心reduce操作最终会是O(n2) 代码示例: val rdd: RDD[int, List[int]] = getMyRDD() rdd.reduceByKey(_ ::: _) 最佳/最有效的解决方案是什么?您能做的最好的是: rdd.groupByKey.mapValues(_.flatten.toList) 这将: 跳过过时的地图边减少。
reduceByKey
。什么是最快的解决方案?我正在使用::
操作符在reduce操作中合并2个列表,但是::
是O(n),所以我担心reduce操作最终会是O(n2)
代码示例:
val rdd: RDD[int, List[int]] = getMyRDD()
rdd.reduceByKey(_ ::: _)
最佳/最有效的解决方案是什么?您能做的最好的是:
rdd.groupByKey.mapValues(_.flatten.toList)
这将:
- 跳过过时的地图边减少。它需要稍微大一点的洗牌,但大大减少了GC时间
- 对中间聚合使用可变缓冲区和摊销常量附加时间李>
- 在O(N)时间内压平中间骨料
aggregateByKey
:
import scala.collection.mutable.ArrayBuffer
rdd.aggregateByKey(ArrayBuffer[Int]())(_ ++= _, _ ++= _).mapValues(_.toList)
但通常情况下,与第一种解决方案相比,它的成本要高得多