我创建了一个python UDF来将日期时间转换为不同的时区。该脚本使用python(或者jython)不附带。我试了两件事情:在亚马逊EMR上为Pig UDF加载外部python模块
- 自举PIG安装它自己的Jython和包括 是Jython安装pytz。我无法让PIG使用新安装的jython ,它仍然会恢复到Amazon的jython。
- 设置PYTHONPATH到新的模块已安装
- 设置HADOOP_CLASSPATH/PIG_CLASSPATH到Jython的一个新安装的本地目录
每一种与结束“导入错误:没有模块名为pytz”时我尝试加载UDF脚本。如果我删除pytz,脚本加载得很好,所以它肯定是给它带来问题的外部模块。
编辑:最初把这个作为一个评论,但我觉得还是让编辑:
我已经想尽办法,我知道的获得PIG承认另一Jython的罐子。这没有奏效。亚马逊的jython在这里:/home/hadoop/.versions/pig-0.9.2/lib/pig/jython.jar,并认识到这个sys.path:/ home/hadoop/lib/Lib。我无法弄清楚如何针对这个jar构建外部库。
http://stackoverflow.com/questions/6811549/how-can-i-include-a-python-package-with-hadoop-streaming-job/6811775#6811775可能会帮助你(他们正试图加载不同的模块,但该方法应该是相同的) –
或http://stackoverflow.com/questions/8129543/hadoop-streaming-importing-modules-on-emr –
是的,我试着引导包到每个奴隶。它的工作,但问题是,我不能让PIG使用我已经安装的jython jar。相反,它总是选择Amazon没有安装任何外部库的jython jar。 –