2013-04-08 128 views
0

我知道与Key相关的所有值都发送给一个Reducer。减速器是否可以通过标准输入一次获得多个键?Reducer通过sys.stdin获取多个密钥?

我的用例是我将行分解为键值对,然后我想将与键关联的所有行发送到API。我看到,虽然多个密钥一次发送到API中。

这里是我的工作运行

映射

def main(): 
    for line in sys.stdin 
     part1 = get_part1(line) 
     part2 = get_part2(line) 
     key = '%s - %s' % (part1, part2) 
     print '%s\t%s' % (key, line) 

减速

def main(): 
    my_module.sent_to_api(sys.stdin) 
+0

我推测你正在使用多个reducer,它们可以跨多个机器/核心同时运行,所以我认为完全有可能将多个密钥从各个reducer发送到API。 – Quetzalcoatl 2013-04-08 14:34:53

+0

实际上,发生的事情是每个reducer都意味着将整个sys.stdin文件发送到API。当我通过API打开这个文件时,它包含多个键。将两个reducer插入到一个文件中是不可能的,所以我只能假定一个reducer已经将多个键放入了它的sys.stdin – Shane 2013-04-08 14:39:21

+0

请记住,虽然所有与单个键相关的值都会发送到一个减速器,减速器可能不仅仅是一个关键。这会解释你所看到的情况吗? (请注意,如果使用默认分区程序以外的任何其他分区,可能不一定是这种情况。) – Quetzalcoatl 2013-04-08 14:45:22

回答

2

虽然与单个键相关联的所有值都发送到单个减速一些示例代码,即减速器可能不仅仅是那一个键,因此在每个输出文件中出现多个键。

+0

每个减速器过程有一个设置是否有一个键? – Shane 2013-04-08 15:20:15

+0

可能有,但是可能更好的做法是重写你写出来的API,因为它似乎没有特别的hadoop-ish以这种方式限制你的reducer。恐怕我个人并不知道自己的头脑,但是无论如何去寻找是否有人问过这样的问题,如果没有,就自问一个单独的问题。 – Quetzalcoatl 2013-04-08 15:25:34