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

MapReale-保留输入顺序

经慈
2023-03-14

包含由管道分隔的数字列表的文件可以有重复项。需要编写map reduce程序,在原始输入顺序中列出不重复的数字。我可以删除重复项,但不保留输入顺序。

共有1个答案

叶茂
2023-03-14

这很简单,假设你的文本是:

Line 1 -> On the top of the Crumpetty Tree
Line 2 -> The Quangle Wangle sat,
Line 3 -> But his face you could not see,
Line 4 -> On account of his Beaver Hat.
Line 5 -> But his face you could not see,
Line 6 -> The Quangle Wangle sat,

其中,第2行和第3行在第5行和第6行重复。

映射器应该类似于wordcount程序,其中映射器的输入类似于

键值对:

(0, On the top of the Crumpetty Tree)
(33, The Quangle Wangle sat,)
(57, But his face you could not see,)
(89, On account of his Beaver Hat.)
(113, But his face you could not see,)
(146, The Quangle Wangle sat,)

映射器的输出

(NullWritable, 0_On the top of the Crumpetty Tree)
(NullWritable, 33_The Quangle Wangle sat,)
(NullWritable, 57_But his face you could not see,)
(NullWritable, 89_On account of his Beaver Hat.)
(NullWritable, 113_But his face you could not see,)
(NullWritable, 146_The Quangle Wangle sat,)

现在,确保您只有一个减速器,这样单个减速器的输入将是

减速机输入

Key: NullWritable
Iterable<value>: [(0_On the top of the Crumpetty Tree), 
(33_The Quangle Wangle sat,), 
(57_But his face you could not see,), 
(89_On account of his Beaver Hat.), 
(113_But his face you could not see,), 
(146_The Quangle Wangle sat,)]

请注意,减速机的输入是按升序排序的,在这种情况下,减速机保持原始顺序,因为文本输入格式中的偏移量到行总是按升序排序。

在reducer中,只需遍历列表,剔除重复项,并在删除开头的偏移量分隔符后写入行。减速器的输出类似于:

减速机键值

NullWritable, value.split("_")[1]

减速机输出

Line 1 -> On the top of the Crumpetty Tree
Line 2 -> The Quangle Wangle sat,
Line 3 -> But his face you could not see,
Line 4 -> On account of his Beaver Hat.

 类似资料:
  • 我正在使用XSLT将包含复杂数据结构、自由文本等的xml文档转换为HTML文档。我处理的文档可以包含或不包含结构项,如果存在结构标记,则可以任意嵌套。数据标记可以引用任何类型的商品,因此我事先不知道XML文档的内容。 文件看起来像 desiderata HTML文档应类似于: 事实上,我不知道这是否是一个好的解决方案,但是因为我不知道我的xml是否包含结构标签,所以我使用了一个“开关”来在两个主模

  • 问题内容: Java Set是否保留顺序?有一种方法将Set返回给我,并且假定数据是有序的,但是遍历Set时,数据是无序的。有没有更好的方法来解决这个问题?是否需要更改方法以返回Set以外的内容? 问题答案: 该Set接口不提供任何订购保证。 它的子接口代表根据某种标准排序的集合。在Java 6中,有两个实现的标准容器。他们是和。 除了SortedSet接口之外,还有类。它记住元素插入到集合中的顺

  • Java集是否保持顺序?一个方法返回一个集合给我,假设数据是有序的,但是在集合上迭代,数据是无序的。有更好的方法来管理这个吗?这个方法需要改变来返回集合以外的东西吗?

  • 我有一个可用的列表名,我正在按blockIndex属性对这些列表进行排序和分组,如下所示: 问题是分组的结果不按block Index排序。

  • 用户提交表单后如何保留他们的输入? 例如: 如果用户键入 fname 和 lname,是的,它会回显出来。但是我想在输入类型中保留他们的名字和姓氏,这样如果表单很长,用户就不需要再次填写。

  • 如果我们想表示一组允许重复并且保留插入顺序的单个对象,那么我们应该使用List。 这里,插入顺序指的是什么?