了解Spark中的treeReduce()

发布于 2021-01-29 16:48:00

您可以在此处查看实现:https
:
//github.com/apache/spark/blob/ffa05c84fe75663fc33f3d954d1cb1e084ab3280/python/pyspark/rdd.py#L804

它与“正常”reduce功能有何不同?
这是什么意思depth = 2

我不希望将reducer函数线性地传递到分区上,而是先减少每个可用对,然后像这样迭代直到我只有一对,并将其减小到1,如图所示:

在此处输入图片说明

是否treeReduce做到这一点?

关注者
0
被浏览
177
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Standardreduce正在获取该函数的包装版本并将其用于mapPartitions。之后,将结果收集并在驱动程序上本地减少。如果分区的数量很大和/或您使用的功能很昂贵,则这会在一台计算机上增加大量负载。

    的第一阶段treeReduce与上面的阶段几乎相同,但是在此之后,部分结果被并行合并,并且仅在驱动程序上执行最终聚合。

    depth
    建议的树的深度

    和自树的节点的深度定义为根和节点之间的边数它,你应该给你更多或更少的预期模式,虽然它看起来像一个分布式聚合能够尽早停止在一些案件。

    值得注意的是,您得到treeReduce的不是二叉树。分区的数量在每个级别上进行调整,并且很可能一次合并两个以上的分区。

    与标准的reduce相比,基于树的版本reduceByKey每次迭代时都执行,这意味着大量的数据改组。如果分区的数量相对较小,使用普通分区会便宜得多reduce。如果您怀疑的最后阶段reduce是瓶颈tree*版本,则值得尝试。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看