gpt4 book ai didi

java - mapPartitions 与 foreach 加累加器方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:07 25 4
gpt4 key购买 nike

在某些情况下,我可以使用mapPartitions或foreach方法获得相同的结果。

例如,在典型的 MapReduce 方法中,我们会在将原始 RDD 转换为元组(键、值)集合的 mapPartitions 之后立即执行 reduceByKey。我认为可以通过使用例如累加器数组来实现相同的结果,其中执行器在每个索引处对一个值求和,并且索引本身可以是键。

由于reduceByKey将在磁盘上执行随机播放,因此我认为在可能的情况下,foreach方法应该更好,即使foreach具有对累加器求和的副作用。

我提出这个请求是为了看看我的推理是否正确。我希望我说清楚了。

最佳答案

不要为此使用聚合器。它们不太可靠。 (例如,如果启用了推测执行,则它们可能会被重复计算。)

但是您描述的方法有其优点。

  • 使用reduceByKey会进行随机播放。优点是它可以处理比单台机器更多的 key 。
  • 使用 foreach + 聚合器方法可以避免随机播放。但现在您无法处理比一台机器所能容纳的更多的 key 。此外,您还必须提前知道 key ,以便可以创建聚合器。代码也变得一团糟。

如果您的 key 数量较少,那么您需要的是 reduceByKeyLocally 方法。它与聚合器技巧基本相同,只是它不使用聚合器,您不必提前知道 key ,并且它是 reduceByKey 的直接替代品。

reduceByKeyLocally为每个分区创建一个 HashMap ,将 HashMap 发送到驱动程序并在那里合并它们。

关于java - mapPartitions 与 foreach 加累加器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30508315/

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