在AWS EMR上的MapReduce代码中导入自定义函数

时间:2014-11-09 02:26:56

标签: python hadoop amazon-web-services emr

我一直在努力奋斗2个小时!

我在python中创建了一个mapper脚本,它在我的其他python脚本中导入了一个自定义函数。

    #!/usr/bin/env python
    import sys

    import testImport

    for line in sys.stdin:
        if line and line!='':
            words = line.strip().lower().split('\t')
            print '%s\t%s' % (words[0].strip(),testImport.age_classify(int(words[1])))

此代码在我的终端上运行良好....问题是当我将此映射器函数上载到AWS Elastic MapReduce时。我的工作失败,错误说"无法导入模块testImport"。

testImport是一个文件' testImport.py'其中包含一些我的辅助函数(如age_classify函数),我需要在每行标准输入上操作。

我将脚本上传到与我的映射器脚本(给定脚本)相同的存储桶中。

当我添加' Streaming program'时,我试图在参数部分传递它。步。在看到所有相关问题之后,我不知道该怎么做。

我怎样才能完成这件事?

任何帮助都会非常棒!

谢谢!

1 个答案:

答案 0 :(得分:0)

如前所述,我已将testImport.py上传到map / reduce脚本的同一个存储桶中。除非您指定,否则EMR无法从该存储桶读取。

对于java,我们在fatjar上为所有相关类创建并创建单个jar文件并执行它。对于你的python脚本,尝试创建单个map脚本和reducer脚本并运行它。