gpt4 book ai didi

apache-spark - Spark 中的“ map 端”聚合

转载 作者:行者123 更新时间:2023-12-03 07:21:19 24 4
gpt4 key购买 nike

我正在使用“学习 Spark”这本书来学习 Spark。偶然发现这个词(第54页)如果我们知道我们的数据不会从中受益,我们可以在combineByKey()中禁用 map 端聚合我很困惑这里的 map 端聚合是什么意思?我唯一想到的是 Hadoop MapReduce 中的 Mapper 和Reducer...但相信这与 Spark 没有任何关系。

最佳答案

使用映射端聚合背后的想法与 Hadoop 组合器几乎相同。如果单个映射器可以为同一键生成多个值,您可以通过本地减少值来减少洗牌。

可以从映射端聚合中受益的一个操作示例是为每个键创建一组值,尤其是在组合之前对 RDD 进行分区时:

首先让我们创建一些虚拟数据:

val pairs = sc.parallelize(
("foo", 1) :: ("foo", 1) :: ("foo", 2) ::
("bar", 3) :: ("bar", 4) :: ("bar", 5) :: Nil
)

并使用combineByKey合并数据:

import collection.mutable.{Set => MSet}
val combined = partitionedPairs.combineByKey(
(v: Int) => MSet[Int](v),
(set: MSet[Int], v: Int) => set += v,
(set1: MSet[Int], set2: MSet[Int]) => set1 ++= set2
)

根据数据分布,这可以显着减少网络流量。总体情况

  • reduceByKey,
  • combineByKeymapSideCombine 设置为 true
  • aggregateByKey
  • 按键折叠

将使用 map 端聚合,而将 mapSideCombine 设置为 falsegroupByKeycombineByKey 则不会。

然而,应用或不应用 map 端聚合之间的选择并不总是显而易见的。在许多情况下,维护所需数据结构和后续垃圾收集的成本可能超过洗牌成本。

关于apache-spark - Spark 中的“ map 端”聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31283932/

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