gpt4 book ai didi

apache-spark - Spark 中的 reducer 概念

转载 作者:行者123 更新时间:2023-12-03 07:15:56 25 4
gpt4 key购买 nike

我有 Hadoop 背景,对 Spark 的了解有限。根据我目前了解到的情况,Spark 没有映射器/ reducer 节点,而是有驱动程序/工作节点。 Worker 类似于 Mapper,而 Driver(在某种程度上)类似于Reducer。由于只有一个驱动程序,因此也就有一个 reducer 。如果是这样,像非常大数据集的字数统计这样的简单程序如何在 Spark 中完成?因为驱动程序可能会耗尽内存。

最佳答案

驱动程序更像是工作的 Controller ,仅在运算符(operator)要求时才拉回数据。如果您正在处理的运算符返回 RDD/DataFrame/Unit,则数据保持分布式。如果它返回 native 类型,那么它确实会拉回所有数据。

否则,map和reduce的概念在这里有点过时了(从工作类型的角度来看)。唯一真正重要的是操作是否需要数据混洗。您可以在 UI 中或通过 toDebugString (其中每个缩进级别都是一个随机播放)查看阶段拆分的随机播放点。

话虽如此,为了模糊理解,您可以将任何需要洗牌的东西等同于 reducer 。否则它就是一个映射器。

最后,等同于您的字数示例:

sc.textFile(path)
.flatMap(_.split(" "))
.map((_, 1))
.reduceByKey(_+_)

在上面,这将在数据加载(textFile)、分割(flatMap)和map的一个阶段完成ping 的完成都可以独立于其余数据。在调用 reduceByKey 之前不需要进行随机播放,因为它需要组合所有数据来执行操作...但是,此操作必须与原因。每个节点都会在本地执行reduceByKey中定义的操作,仅合并之后的最终数据集。这减少了内存和网络开销。

注意reduceByKey 返回一个 RDD,因此是一个转换,因此数据通过HashPartitioner。所有数据不会拉回到驱动程序,它只是移动到具有相同键的节点,以便可以合并其最终值。

现在,如果您使用诸如 reduce 或更糟糕的 collect 之类的 action,那么您将不会获得 RDD 返回,这意味着数据返回到驱动程序,您将需要空间。

Here is my fuller explanation of reduceByKey if you want more 。或者如何将其分解为 combineByKey 之类的内容

关于apache-spark - Spark 中的 reducer 概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751425/

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