首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapReduce中的筛选/排除列

MapReduce中的筛选/排除列
EN

Stack Overflow用户
提问于 2014-05-11 14:40:53
回答 1查看 456关注 0票数 2

我想知道实现M/R过滤器的最佳实践是什么,它将执行以下操作:

假设有一个键值对:

键: IntegerID,值:n个整数值。例如:

1%2 2 3 3 6

2 3 4 5 6 7 8

1 5 2 6 2 2 6

我想过滤(排除)包含“”的列

期望产出:

1.2 2 3 3 6

2-3 4 5 6 8

5 2 6 2 6

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-11 18:56:47

它看起来一点也不适合M/R,因为还原器需要查看所有行的所有值才能对列做出“决定”。

我很想知道实际的问题是什么,以及为什么你一开始就决定使用M/R。

如果我必须在M/R中这样做的话

我会让映射器将每一行分隔成(col#、rowkey、value)对-- col#是这样的,因此来自一个列的所有数据都将在一个还原器中结束(谁可以决定是否丢弃该列)。row_id将用于将来自所有还原器的结果组合回一行。

例如,示例中的第一行将从mapper发送到减速机,如下所示:

(0,1,1)

(1,1,2)

(2,1,2)

(3,1,3)

(4,1,3)

(5,1,0)

(6,1,6)

然后,您将需要一个分区器,它将映射输出划分为基于列号(即col#的第一个元素,rowkey)对的还原器。还编写了一个自定义比较器,因此映射结果将到达按值排序的还原器。

这样,还原器只需要查看第一个值--如果它的值为0,我们知道列包含一个0,还原器可以退出而不执行任何其他操作。如果它不是0,它应该充当身份还原器--只需输出映射程序的所有结果。

现在,您需要第二个M/R作业将它以原始格式重新放在一起:映射器不会做任何事情。自定义分区程序将使用相同行键的所有结果发送到同一个减速机。如果在最终结果集中保留行顺序很重要,则可以使用全序分配器。自定义比较器将按行键和col#对每个分区中的数据进行排序。

还原器将将同一行的所有值逐一写入字符串中,然后将其输出为一行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23593932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档