gpt4 book ai didi

apache-spark - Spark中的treeReduce与reduceByKey

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

我看到了以下帖子:Understanding TreeReduce in Spark

我仍在尝试准确了解何时使用 treeReduce 和 reduceByKey。我认为我们可以使用诸如字数统计之类的通用示例来帮助我进一步了解正在发生的事情。

  • 在字数统计中使用 reduceByKey 总是有意义吗?
  • 或者当 treeReduce 更有意义时,是否存在特定大小的数据?
  • 当 treeReduce 是更好的选择时,是否有特殊情况或经验法则?
  • 这也可以在上面基于 reduceByKey 得到回答,但是使用 reduceByKeyLocally 和 treeReduce 会改变什么
  • 如何正确确定深度?

编辑:所以在 spark-shell 中玩,我想我根本不了解 treeReduce 的概念,但希望一个例子和这些问题有所帮助。

res2: Array[(String, Int)] = Array((D,1), (18964,1), (D,1), (1,1), ("",1), ("",1), ("",1), ("",1), ("",1), (1,1))

scala> val reduce = input.reduceByKey(_+_)
reduce: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[11] at reduceByKey at <console>:25

scala> val tree = input.treeReduce(_+_, 2)
<console>:25: error: type mismatch;
found : (String, Int)
required: String
val tree = input.treeReduce(_+_, 2)

最佳答案

两者有本质的区别——reduceByKey只在键值对RDDs上可用,而treeReducereduce的泛化> 对任何 RDD 的操作。 reduceByKey 用于实现 treeReduce 但它们在任何其他意义上都没有关系。

reduceByKey 对每个键执行归约,产生一个 RDD;它不是 RDD 意义上的“ Action ”,而是返回 ShuffleRDD 的转换。这等效于 groupByKey 后跟一个 map 进行按键缩减(检查 this 为什么使用 groupByKey 效率低下)。

另一方面,treeAggregatereduce 函数的泛化,其灵感来自 AllReduce。这是 Spark 意义上的“ Action ”,在主节点上返回结果。正如您问题中发布的链接所解释的那样,在执行本地归约操作后,reduce 在主节点上执行其余的计算,这可能非常繁重(尤其是在机器学习中,当归约函数导致大向量或矩阵)。相反,treeReduce 使用 reduceByKey 并行执行归约(这是通过动态创建键值对 RDD 来完成的,键由树的深度决定; 检查实现 here )。

所以,要回答你的前两个问题,你必须使用 reduceByKey 来计算字数,因为你有兴趣获得每个字数,而 treeReduce 在这里不合适.其他两个问题与本主题无关。

关于apache-spark - Spark中的treeReduce与reduceByKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34078430/

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