gpt4 book ai didi

apache-spark - Spark RDD.aggregate vs RDD.reduceByKey?

转载 作者:行者123 更新时间:2023-12-04 04:13:40 25 4
gpt4 key购买 nike

我有 RDD[String] 每行包含一个单词。目前规模很小,只有 10-20k 行,但目标是将其扩展到数亿行。我遇到的问题是,即使对于这个小数据集,执行 map/reduceByKey 操作也花费了惊人的时间。我运行以下命令:

val wordcount = filtered.map(w => (w,1)).reduceByKey(_ + _)

对于 16780 行,在 2 GHz i7 8 GB RAM 机器上需要 12321 毫秒。我发现有一种称为 aggregate 的方法可能更有效地利用内存,因此速度更快:

aggregate[U: ClassTag](zeroValue: U)(seqOp: (U, T) => U, combOp: (U, U) => U): U

我不太清楚如何在我的案例中实现这一点。我假设它应该是这样的

aggregate(collection.immutable.Map)(??)

所以我的问题是

1) 使用 aggregate 代替 reduceByKey 是否有意义

2) 如果是,将如何实现?

最佳答案

我想,最快的是 countByValue:

Return the count of each unique value in this RDD as a map of (value, count) pairs. The final combine step happens locally on the master, equivalent to running a single reduce task.

用法很简单:

val wordcount = filtered.countByValue

这个方法的实现应该可以回答第二个问题:)

顺便说一句,reduceByKey 不应该花那么长时间。看起来预计算(即过滤)占用了这 12 秒的大部分时间。为了验证它,在计数之前坚持 RDD:

val persisted = filtered.persist
val wordcount = persisted.countByValue

关于apache-spark - Spark RDD.aggregate vs RDD.reduceByKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25318153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com