【发布时间】:2013-05-29 02:48:22
【问题描述】:
我正在尝试在 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]'
我在这里和其他地方进行了搜索,看到了一些相关的问题和解决方案,但似乎没有一个解决方案适用,包括一年多前的一个 post,这似乎表明这在 Pig 0.9.1 上运行良好在 Amazon EMR 上。
$ 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;
有什么建议吗?
【问题讨论】:
-
修复是使用 Pig 0.11.1!
-
你在本地模式的Pig中试过这个吗?
标签: jython apache-pig emr