avatar
Pig UDF written in Python# DataSciences - 数据科学
r*d
1
我又要请教大家一个问题了,,
我在试验怎么用Pig UDF in Python,
当运行:
grunt>register '/absolute_path_to/my_first_udf.py' using jython as myfuncs;
得到:
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2999: Unexpected internal
error. null
Details at pig_1400616625260.log
我查了下log file, 里面写着:
Pig Stack Trace
---------------
ERROR 2999: Unexpected internal error. null
SyntaxError: ("mismatched input '' expecting DEDENT", ('', 5,
20, ' return decoratorn'))
我比较确定.py file没问题。
谁知道这是怎么回事?谢谢了!
avatar
k*o
2
have you register jython.jar before registering python script?
or adding jython.jar path to your PIG_CLASSPATH environment?
same thing, and see if it works

【在 r*****d 的大作中提到】
: 我又要请教大家一个问题了,,
: 我在试验怎么用Pig UDF in Python,
: 当运行:
: grunt>register '/absolute_path_to/my_first_udf.py' using jython as myfuncs;
: 得到:
: ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2999: Unexpected internal
: error. null
: Details at pig_1400616625260.log
: 我查了下log file, 里面写着:
: Pig Stack Trace

avatar
r*d
3
Thank you.
i did register jython.jar and did add jython.jar path to my PIG_CLASSPATH
environment.
if i did not do them, it would be a *different* error code, which would be:
Pig Stack Trace
---------------
ERROR 2998: Unhandled internal error. org/python/core/PyObject
java.lang.NoClassDefFoundError: org/python/core/PyObject
at org.apache.pig.scripting.jython.JythonScriptEngine.
registerFunctions(JythonScriptEngine.java:304)
...

【在 k****o 的大作中提到】
: have you register jython.jar before registering python script?
: or adding jython.jar path to your PIG_CLASSPATH environment?
: same thing, and see if it works

avatar
r*d
4
could there be a compatibility issue between jython and pig?

【在 k****o 的大作中提到】
: have you register jython.jar before registering python script?
: or adding jython.jar path to your PIG_CLASSPATH environment?
: same thing, and see if it works

avatar
r*d
5
问题终于孑孓了。。
问题出在原来的jython是老版本,2.5.1+
我下载了最新的版本,2.5.3
然后把原来的register jython.jar跟PIG_CLASSPATH都换成新的就好了
老版本可以用来单独运行python script,
但是不能放到register 'my_udf.py' using jython as myfuncs;
因为跟用的Pig版本不兼容
就酱紫
avatar
r*d
6
又有一个问题,需要import a python module怎么办?
比如import json
执行pig script的时候得到:
ImportError: no module named json
json这个module在那里,
假设这个python script的名字是test.py
执行python test.py没问题
但是执行jython test.py就也得到ImportError: no module named json
非常感谢!

【在 r*****d 的大作中提到】
: 我又要请教大家一个问题了,,
: 我在试验怎么用Pig UDF in Python,
: 当运行:
: grunt>register '/absolute_path_to/my_first_udf.py' using jython as myfuncs;
: 得到:
: ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2999: Unexpected internal
: error. null
: Details at pig_1400616625260.log
: 我查了下log file, 里面写着:
: Pig Stack Trace

avatar
j*g
7
UDF里面的package必须要是implemented by Jyphon才可以, 有些Cython编译的就不行

【在 r*****d 的大作中提到】
: 又有一个问题,需要import a python module怎么办?
: 比如import json
: 执行pig script的时候得到:
: ImportError: no module named json
: json这个module在那里,
: 假设这个python script的名字是test.py
: 执行python test.py没问题
: 但是执行jython test.py就也得到ImportError: no module named json
: 非常感谢!

avatar
l*m
8
need to test in jython.
BTW, using java is much much better with hadoop. Json parsing in java is 10-
time faster compared to python.

【在 r*****d 的大作中提到】
: 又有一个问题,需要import a python module怎么办?
: 比如import json
: 执行pig script的时候得到:
: ImportError: no module named json
: json这个module在那里,
: 假设这个python script的名字是test.py
: 执行python test.py没问题
: 但是执行jython test.py就也得到ImportError: no module named json
: 非常感谢!

avatar
r*d
9
More details please? Thank you very much.

【在 j*******g 的大作中提到】
: UDF里面的package必须要是implemented by Jyphon才可以, 有些Cython编译的就不行
avatar
r*d
10
i don't know how to code in java..
yeah i was convinced today that UDFs should be coded in java

10-

【在 l*******m 的大作中提到】
: need to test in jython.
: BTW, using java is much much better with hadoop. Json parsing in java is 10-
: time faster compared to python.

avatar
r*d
11
update:
如果python udf 不 import any module, 没问题,
但是,奇葩的是
一个python script(里面有import ast), say test.py
执行python test.py没问题
执行jython test.py也没问题
但是,,
如果在Pig script里register test.py using jython
得到ImportError: No module named ast

【在 r*****d 的大作中提到】
: 又有一个问题,需要import a python module怎么办?
: 比如import json
: 执行pig script的时候得到:
: ImportError: no module named json
: json这个module在那里,
: 假设这个python script的名字是test.py
: 执行python test.py没问题
: 但是执行jython test.py就也得到ImportError: no module named json
: 非常感谢!

avatar
l*m
12
如果你就是在pig读json. 用elephant bird的json loader就好,不用java coding
download如下jar(google 他们的jar下载,不要编译整个repositery, 不容易)
register /path/to/json-simple.jar;
register /path/to/elephant-bird-core.jar;
register /path/to/elephant-bird-pig.jar;
一个完整的example
https://github.com/kevinweil/elephant-bird/blob/master/examples/src/main/pig
/nested_json_get_distinct_items_from_nested_array.pig

【在 r*****d 的大作中提到】
: i don't know how to code in java..
: yeah i was convinced today that UDFs should be coded in java
:
: 10-

avatar
j*g
13
another thing I can think of is you probably should make sure all data nodes
has this package installed, did you test on every data node you gonna use?

【在 r*****d 的大作中提到】
: update:
: 如果python udf 不 import any module, 没问题,
: 但是,奇葩的是
: 一个python script(里面有import ast), say test.py
: 执行python test.py没问题
: 执行jython test.py也没问题
: 但是,,
: 如果在Pig script里register test.py using jython
: 得到ImportError: No module named ast

avatar
r*d
14
嗯,是某一个field是json而不是整个table所以不是load function这边。
anyway, 我在学java coding, 目标就是写写udf酱紫

pig

【在 l*******m 的大作中提到】
: 如果你就是在pig读json. 用elephant bird的json loader就好,不用java coding
: download如下jar(google 他们的jar下载,不要编译整个repositery, 不容易)
: register /path/to/json-simple.jar;
: register /path/to/elephant-bird-core.jar;
: register /path/to/elephant-bird-pig.jar;
: 一个完整的example
: https://github.com/kevinweil/elephant-bird/blob/master/examples/src/main/pig
: /nested_json_get_distinct_items_from_nested_array.pig

avatar
r*d
15
hopefully it is not this complicated.. i treat data nodes as encapsulation..

nodes

【在 j*******g 的大作中提到】
: another thing I can think of is you probably should make sure all data nodes
: has this package installed, did you test on every data node you gonna use?

avatar
l*m
16
elephant bird有jsonStringToMap的UDF. 当然自己写,也没几行

【在 r*****d 的大作中提到】
: 嗯,是某一个field是json而不是整个table所以不是load function这边。
: anyway, 我在学java coding, 目标就是写写udf酱紫
:
: pig

avatar
t*g
18
lz是HH?
avatar
r*d
19
谢谢大家!迟些时候发包子。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。