Map在python boto中减少多个输出

时间:2013-04-30 16:09:13

标签: python hadoop boto emr

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

谢谢

1 个答案:

答案 0 :(得分:1)

不确定你遇到了什么麻烦。这是一篇好文章 - http://aws.amazon.com/articles/2294

您的具体问题是,您要创建一个映射器,它将您的文件作为输入并将每行拆分为一个键,值对(键确定它将在哪个输出文件中),并且您的reducer将只需要输出这些,一个无操作。

映射

#!/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存储桶),并将这些文件指定为映射器和缩减器。

注意,有些配置不设置reducer,只是mapper任务。我把它全部包括在内,因为你似乎是一个初学者