我正在尝试在 Amazon EMR 上的 Pig 中运行一个简单的 Python UDF,它会引发 java 序列化错误:
java.io.IOException: Deserialization error: could not instantiate 'org.apache.pig.scripting.jython.JythonFunction' with arguments '[/tmp/pig4877832484731242596tmp/simple.py, aprs]'
我在这里和其他地方进行了搜索,看到了一些相关的问题和解决方案,但似乎没有一个解决方案适用,包括一年多前的一篇文章似乎表明这在 Amazon EMR 上与 Pig 0.9.1 一起工作正常。
$ pig --version
Apache Pig version 0.9.2-amzn (rexported)
compiled Aug 06 2012, 20:34:29
$ hadoop version
Hadoop 1.0.3
这是我的琐碎 python UDF:
#/usr/bin/python
@outputSchema("data:chararray")
def aprs(l):
return l
这是显示 UDF 已加载且 @outputSchema 做了正确的事情的 pig 脚本调用:
grunt> Register 's3n://n2ygk/simple.py' using jython as myudf;
grunt> raw = LOAD 's3n://aprs-is/small-sample.log' USING TextLoader as (line:chararray);
grunt> cooked = LIMIT raw 1000;
grunt> aprs = FOREACH cooked GENERATE FLATTEN(myudf.aprs(line));
grunt> DESCRIBE aprs;
aprs: {data: chararray}
grunt> dump aprs;
有什么建议么?