了解Sp中的treeReduce()

2024-10-01 17:26:31 发布

您现在位置:Python中文网/ 问答频道 /正文

您可以在这里看到实现: https://github.com/apache/spark/blob/ffa05c84fe75663fc33f3d954d1cb1e084ab3280/python/pyspark/rdd.py#L804

它与“normal”reduce函数有何不同?
这是什么意思?在

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

enter image description here

treeReduce是否实现了这一点?在


Tags: 函数pyhttpsgithubcomreduceapacheblob
1条回答
网友
1楼 · 发布于 2024-10-01 17:26:31

标准的reduce将获取该函数的包装版本并将其用于^{}。然后收集结果并在驱动程序上reduced locally。若分区的数量很大,并且/或您使用的函数很昂贵,则会在一台机器上施加很大的负载。在

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

depthsuggested depth of the tree,由于树中节点的深度定义为根和节点之间的边数,因此您应该或多或少地给您一个预期的模式,尽管在某些情况下它看起来像是一个分布式聚合can be stopped early。在

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

与标准reduce相比,基于树的版本performs ^{} with each iteration意味着大量的数据洗牌。若分区的数量相对较少,则使用普通reduce会便宜得多。如果您怀疑reduce的最后阶段是一个瓶颈,tree*版本可能值得一试。在

相关问题 更多 >

    热门问题