【发布时间】:2012-06-08 18:18:19
【问题描述】:
我创建了一个 python UDF 来将日期时间转换为不同的时区。该脚本使用不随 python(或 jython)一起提供的 pytz。我尝试了几件事:
- 引导 PIG 安装它自己的 jython 并将 pytz 包含在 那个 jython 安装。我无法让 PIG 使用新安装的 jython,它不断恢复为亚马逊的 jython。
- 将 PYTHONPATH 设置为安装了新模块的本地目录
- 将 HADOOP_CLASSPATH/PIG_CLASSPATH 设置为新安装的 jython
当我尝试加载 UDF 脚本时,每一个都以“ImportError: No module named pytz”结束。如果我删除 pytz,脚本加载正常,所以肯定是外部模块给它带来了问题。
编辑:最初将此作为评论,但我认为我只是将其作为编辑:
我已经尝试了所有我知道的方法来让 PIG 识别另一个 jython jar。那没有奏效。亚马逊的 jython 在这里:/home/hadoop/.versions/pig-0.9.2/lib/pig/jython.jar,正在识别这个 sys.path:/home/hadoop/lib/Lib。我不知道如何针对这个 jar 构建外部库。
【问题讨论】:
-
stackoverflow.com/questions/6811549/… 可能对您有所帮助(他们正在尝试加载不同的模块,但方法应该相同)
-
是的,我尝试将包引导到每个从站。它有效,但问题是我无法让 PIG 使用我安装的 jython jar。相反,它总是选择没有安装任何外部库的 Amazon 的 jython jar。
-
我猜运行时解析的类路径在你的前面有他们的 jython jar - 你能修改 hadoop-env.sh 文件吗? (我没有使用 EMR,抱歉)
-
我还没有尝试过,但我已经直接在调用 pig 可执行文件的行上分配了 HADOOP_CLASSPATH 和 PIG_CLASSPATH,如下所示:stackoverflow.com/questions/9300509
标签: python amazon apache-pig emr