python - map 减少python boto中的多个输出

标签 python hadoop boto emr

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

谢谢

最佳答案

不确定您遇到了什么麻烦。这是一篇好文章 - 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()

reducer

#!/usr/bin/python

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

if __name__ == "__main__":
    main()

添加此步骤时,您指定输入、输出(某些 s3 存储桶)和这些文件作为映射器和缩减器。

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

关于python - map 减少python boto中的多个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16304362/

相关文章:

python - 有没有更优雅的方法用 Python 编写这个?

python - Python:如何在路径列表上使用os.path.isfile()?

hadoop - 从事养 pig 工作的制图员数量d

hadoop - 手动修复Hbase表重叠(多区域具有相同的启动键)

amazon-web-services - 用于下载文件的 S3 模块在 ansible 中不起作用

python - 在 Python 中管理实例

python - 如何使用mysqldb进行本地mysql连接

java - 使用MapReduce在Hadoop上测试JNI

docker - 从ec2实例启动另一个ec2实例并在其上推送一个csv文件

django - 覆盖 Boto 处理的 FileField 的 Model.save() -- Django