当前位置: 首页 > 知识库问答 >
问题:

Mapreduce中的键是按值传递还是按引用传递?

左丘峰
2023-03-14

我创建了一个MapReduce作业,该作业将计算键的数量,然后根据它们出现的次数对它们进行排序

处理输入时,如

1A99
1A34
1A99
1A99
1A34
1A12

最终目标将是一个类似于

1A99 3
1A34 2
1A12 1

我的地图阶段输出a

我的减少阶段有3个阶段:设置,我初始化一个数组列表来保存我的

数组列表中的值是我创建的一个对象myObject的值,它将文本和Int保存在一个元组中可写,我发现一个奇怪的地方是当我这样做的时候

new myObject(key, count)
    
  • key是传递到reducer的键,count是我通过求和值创建的int-writable(Iterable int writable)

最后,数组中的所有键都是相同的键,而只有计数不同。

如果我真的这么做了

new myObject(new Text(key), count)

从本质上讲,复制钥匙是可行的。

我找不到任何关于从映射器传递到减速器的键是否通过引用的信息,但这似乎是唯一合理的解释为什么会发生这种情况。

共有1个答案

萧自珍
2023-03-14

如果不看实际代码,理解实际问题有点困难。然而,您似乎不需要reduce阶段的第1阶段和第3阶段。减速机将获得一个键(Text)和一个值列表(Iterable)

以下是数据集的处理方式:

Raw data
1A99
1A34
1A99
1A99
1A34
1A12

Some number of mappers will process this, say 3:
input to mapper 1
1A99
1A34
1A99

input to mapper 2
1A99

input to mapper 3
1A34
1A12

output of mapper 1
1A99, 1
1A34, 1
1A99, 1

output of mapper 2
1A99, 1

output of mapper 3
1A34, 1
1A12, 1

intermediate shuffle phase collects all values for keys
1A99, (1,1,1)
1A34, (1, 1)
1A12, (1)

Now, say we force one reducer (though there may be more than one)

reducer 1 input and output
1A99, (1,1,1) -> 1A99, 3
1A34, (1, 1) -> 1A34, 2
1A12, (1) -> 1A12, 1

可能有帮助的参考:

https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Example:_WordCount_v1.0

 类似资料:
  • 本文向大家介绍JS是按值传递还是按引用传递,包括了JS是按值传递还是按引用传递的使用技巧和注意事项,需要的朋友参考一下 按值传递 VS. 按引用传递 按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。   按引用传递(call by reference)时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被

  • 问题内容: 我一直认为Java使用传递引用。 但是,我已经看到了几篇博客文章声称不是(博客文章说Java使用值传递)。 我不认为我能理解他们的区别。 有什么解释? 问题答案: Java总是按值传递。 不幸的是,我们根本不处理任何对象,而是处理称为引用的 对象句柄(当然是通过值传递)。选择的术语和语义很容易使许多初学者感到困惑。 它是这样的: 在上面的示例中仍将返回”Max”。值aDog内main未

  • 问题内容: 我读了许多文章,都说Java是通过价值传递的。但是我仍然不能解释按值传递和引用之间的区别。我写了一个示例程序,它像这样执行。 执行 谁能向我解释这些问题… 价值传递是什么意思? 答:它只是将存储在变量中的数字或值传递给函数。我是对还是错。 How do you say Java是通过价值传递? 为什么Java是按值传递而不是按引用传递? 上面的程序Tries是否显示了“按值传递”和“引

  • 问题内容: 基本类型(数字,字符串等)按值传递,但对象未知,因为它们都可以按值传递(如果我们认为保存对象的变量实际上是对该对象的引用) )和按引用传递(当我们认为对象的变量包含对象本身时)。 尽管最后并没有什么大不了,但我想知道呈现通过惯例的参数的正确方法是什么。是否有JavaScript规范的摘录,其中定义了与此相关的语义? 问题答案: JavaScript很有趣。考虑以下示例: 产生输出: 如

  • 问题内容: 如果我将数据帧传递给函数并在函数内部对其进行修改,那么它是按值传递还是按引用传递? 我运行以下代码 函数调用后,的值不变。这是否意味着价值传递? 我也尝试了以下 事实证明,变化并没有。为什么会这样呢? 问题答案: 简短的答案是,Python始终会传递值,但每个Python变量实际上都是指向某个对象的指针,因此有时看起来像是传递引用。 在Python中,每个对象都是可变的或不可更改的。例

  • 因此,在父对象的状态中所做的更改也可以通过它所出现的道具立即在子对象中使用。 这样做正确吗?