Python 是否通过sys.stdin获取多个密钥?

Python 是否通过sys.stdin获取多个密钥?,python,hadoop,hadoop-streaming,Python,Hadoop,Hadoop Streaming,我知道与一个键关联的所有值都被发送到一个减速机。减速机是否可以通过其标准输入一次获得多个键 我的用例是将行拆分为键值对,然后我希望将与键关联的所有行发送到API。我看到多个键同时被发送到API中 下面是我的作业正在运行的一些示例代码 制图员 def main(): for line in sys.stdin part1 = get_part1(line) part2 = get_part2(line) key = '%s - %s' % (

我知道与一个键关联的所有值都被发送到一个减速机。减速机是否可以通过其标准输入一次获得多个键

我的用例是将行拆分为键值对,然后我希望将与键关联的所有行发送到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)

虽然与单个键相关联的所有值都被发送到一个reducer,但该reducer可能得到的不仅仅是一个键,因此在每个输出文件中都会出现多个键。

我假定您使用的是多个reducer,它们能够在多台机器/内核上同时运行,所以我认为完全有可能将多个键从不同的reducer发送到API。实际上,每个reducer都要将整个sys.stdin文件发送到API。当我通过API打开这个文件时,它包含多个键。两个reducer不可能插入到一个文件中,因此我只能假设一个reducer在其sys.stdin中获得了多个键。请记住,虽然与单个键关联的所有值都发送到单个reducer,但该reducer可能获得的不仅仅是一个键。这能解释你所看到的情况吗?(请注意,如果您使用的不是默认的分区器,可能不一定如此。)感谢Quetzalcatl,这将解释这种行为。我假设每个键的每个减速器上都会启动一个新流程。谢谢你很高兴知道这解释了它,你能把我的答案标记为正确的,这样问题就可以很好地结束了吗?是否有一个设置,每个reducer进程有一个键?可能有,但也许最好重新编写这个API,因为用这种方式限制你的reducer似乎并不特别像hadoop。恐怕我个人还不太清楚,但我会想尽一切办法去寻找以前是否有人问过这样的问题,如果没有,请你自己单独提问。