在python boto中映射减少多个输出

在python boto中映射减少多个输出,python,hadoop,boto,emr,Python,Hadoop,Boto,Emr,我正在尝试使用AWS EMR对输入文件进行分区。 我使用流式处理步骤读取stdin。 我想根据stdin每行中特定字段的值将此文件拆分为2个文件,并将结果输出存储到S3中以供以后使用。 我找不到任何关于如何使用python实现这一点的文档。 你能给我指一下正确的方向吗? 我将非常感激 谢谢你我不太清楚你遇到了什么麻烦。这是一篇好文章- 你的具体问题是,你想创建一个映射器,它把你的文件作为输入,把每一行分割成一个键,值对(键决定它将在哪个输出文件中),你的缩减器只需要输出这些,一个no-op 制图

我正在尝试使用AWS EMR对输入文件进行分区。 我使用流式处理步骤读取stdin。
我想根据stdin每行中特定字段的值将此文件拆分为2个文件,并将结果输出存储到S3中以供以后使用。 我找不到任何关于如何使用python实现这一点的文档。 你能给我指一下正确的方向吗? 我将非常感激


谢谢你

我不太清楚你遇到了什么麻烦。这是一篇好文章-

你的具体问题是,你想创建一个映射器,它把你的文件作为输入,把每一行分割成一个键,值对(键决定它将在哪个输出文件中),你的缩减器只需要输出这些,一个no-op

制图员

#!/usr/bin/python

def main():
    for line in sys.stdin:
        key = get_my_key(line)
        value = line
        print '{}\t{}'.format(key, value)

if __name__ == "__main__":
    main()
减速器

#!/usr/bin/python

def main():
    for line in sys.stdin:
        print line

if __name__ == "__main__":
    main()
添加此步骤时,您可以指定输入、输出(一些s3 bucket)和这些文件作为映射器和还原器


注意,有一些配置不设置减速机,只设置映射器任务。我把这一切都包括在上面,因为你似乎是个初学者,不太清楚自己遇到了什么麻烦。这是一篇好文章-

你的具体问题是,你想创建一个映射器,它把你的文件作为输入,把每一行分割成一个键,值对(键决定它将在哪个输出文件中),你的缩减器只需要输出这些,一个no-op

制图员

#!/usr/bin/python

def main():
    for line in sys.stdin:
        key = get_my_key(line)
        value = line
        print '{}\t{}'.format(key, value)

if __name__ == "__main__":
    main()
减速器

#!/usr/bin/python

def main():
    for line in sys.stdin:
        print line

if __name__ == "__main__":
    main()
添加此步骤时,您可以指定输入、输出(一些s3 bucket)和这些文件作为映射器和还原器


注意,有一些配置不设置减速机,只设置映射器任务。我把这些都包括在上面,因为你似乎是个初学者

谢谢你的快速回复。如果我理解正确,映射器将确定如何分割输入文件(这是我编写条件的地方,在此条件下这是真的)。我感到困惑的是,这将如何创建我想要的2个文件。。reducer的工作是将不同的键值对打印到输出文件中。每种类型的键值对会有一个减缩器,因此会有两个输出文件吗?再次您好,我可以在一些修改后运行您的代码。EMR作业返回3个文件(part-00000、part-00001、part-00002)。它们都包含与我在代码中指定的键和值字段相匹配的数据。但是,我希望将与特定字段值匹配的所有记录保存到一个文件中,并将所有其他记录保存到另一个文件中。这种技术很好地疏远了我想要的记录,但忽略了其他记录。有什么想法吗?你的
get_key
函数应该为你想要在一个文件中的字段值返回一个键,然后为所有其他记录单独返回一个键。我写了一个简单的例子,在某些情况下将键设置为一个字段,在其他情况下设置为另一个字段。但是,由于分配了3个还原器来运行作业,因此输出仍然返回3个输出文件。我不明白如何在EMR或python代码中指定创建2个分离文件并根据我的规范填充它们。那么,您的还原程序太多了。减速机得到1个键,因此如果您知道只需要2个键,则应将其设置为2个减速机任务谢谢您的快速回复。如果我理解正确,映射器将确定如何分割输入文件(这是我编写条件的地方,在此条件下这是真的)。我感到困惑的是,这将如何创建我想要的2个文件。。reducer的工作是将不同的键值对打印到输出文件中。每种类型的键值对会有一个减缩器,因此会有两个输出文件吗?再次您好,我可以在一些修改后运行您的代码。EMR作业返回3个文件(part-00000、part-00001、part-00002)。它们都包含与我在代码中指定的键和值字段相匹配的数据。但是,我希望将与特定字段值匹配的所有记录保存到一个文件中,并将所有其他记录保存到另一个文件中。这种技术很好地疏远了我想要的记录,但忽略了其他记录。有什么想法吗?你的
get_key
函数应该为你想要在一个文件中的字段值返回一个键,然后为所有其他记录单独返回一个键。我写了一个简单的例子,在某些情况下将键设置为一个字段,在其他情况下设置为另一个字段。但是,由于分配了3个还原器来运行作业,因此输出仍然返回3个输出文件。我不明白如何在EMR或python代码中指定创建2个分离文件并根据我的规范填充它们。那么,您的还原程序太多了。一个reducer得到1个键,所以如果您知道您只需要2个键,那么您应该将其设置为2个reducer任务