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

在MapReduce作业中多次迭代Reducer中的文本输入值

东门修能
2023-03-14

我在HDFS上有两个非常大的数据集(表)。我想在一些列上连接它们,然后在一些列上将它们分组,然后在某些列上执行一些分组函数。

我的步骤是:

1-创建两个工作。

2-在第一个作业中,在映射器中,读取每个数据集的行作为映射输入值,并发出连接列的值作为映射输出键,其余列的值为映射输出值。

映射之后,MapReduce框架执行混洗,并根据映射输出键对所有映射输出值进行分组。

然后,在reducer中,它读取每个映射输出键及其值,这些值可能包含两个数据集中的许多行。

我想要的是多次迭代减少输入值,这样我就可以执行笛卡尔积。

为了说明:

假设对于一个连接键x,我有来自一个数据集的100个匹配项和来自另一个数据集的200个匹配项。这意味着在连接键x上连接它们会产生100*200=20000个组合。我想发出NullWritable作为减少输出键,每个笛卡尔乘积作为减少产出值。

输出示例可能是:

对于连接键x:

从(nullWritable),(第一(1),第二(1))

Over (nullWritable),(第一个(1),第二个(200))

至(可空写),(第一(100),第二(200))

我该怎么做呢?

我只能迭代一次。我不能兑现这些价值,因为它们不适合内存。

3-如果我这样做,我将启动第二个作业,它将第一个作业的结果文件作为输入文件。在映射器中,我将组列的值作为映射输出键发出,其余列的值作为映射输出值发出。然后在化简器中,通过迭代每个键的值,我对一些列执行一些函数,如总和,avg,最大值,最小值。

提前致谢。

共有1个答案

陶修洁
2023-03-14

由于您的第一个MR作业使用连接键作为地图输出键,您的第一个减速器将获得(Kjoin_key,List

 类似资料:
  • 现在我有一个4阶段的MapReduce作业,如下所示:

  • 我只是使用3机器集群测试单词计数示例。我的代码与此示例相同,但以下代码除外:

  • 我试图运行WordCount示例的一个变体,这个变体是,映射器输出文本作为键和文本作为值,而还原器输出文本作为键和NullWritable作为值。 除了地图,减少签名,我把主要的方法是这样的:

  • 我是hadoop新手。我正在尝试运行MapReduce(Java编程),其中键是多键(文本)。我应该使用哪种类型的数组来存储这些键,然后将它们作为参数传递给outputCollector?谢谢!!!

  • 问题内容: 我收到一个迭代器作为参数,并且想对值进行两次迭代。 可能吗 ?怎么样 ?签名是由我使用的框架(即Hadoop)强加的。 -编辑- 最后,该方法的真正签名是一个。我被这个Wiki页面所迷住了(实际上这是我发现的唯一不被弃用(但错误的)单词计数示例)。 问题答案: 如果要再次迭代,我们必须缓存来自迭代器的值。至少我们可以将第一次迭代和缓存结合起来: (只需要添加代码答案,就知道您在自己的注

  • 本文向大家介绍C ++中的输入迭代器,包括了C ++中的输入迭代器的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将讨论一个程序,以了解C ++中的输入迭代器。 输入迭代器是STL中五个最弱,最简单的迭代器之一。它们主要用于串行输入操作,在该操作中,每个值都被读取为一个值,然后迭代器移至下一个值。 示例 输出结果