Home | About | Sematext search-lucene.com search-hadoop.com
 Search Hadoop and all its subprojects:

Switch to Threaded View
Pig >> mail # user >> why the udf can not work


Copy link to this message
-
Re: why the udf can not work
Looks like you need to learn a bit about how java package works. The path
for the class file needs to be

/home/huyong/test/*myudfs*/UPPER.class

Or remove the first line in your UDF code "package myudfs;" and redo
everything you did, it will work.

2011/6/19 勇胡 <[EMAIL PROTECTED]>

> In this path, it has already contained UPPER.class and UPPER.java. And the
> myudfs.jar is also in the path. But it did not work. By the way, my Pig
> version is 0.8.1. Is there something, for example, classpath I have to set
> up in the Pig configuration?
>
> Yong
>
> 在 2011年6月19日 上午4:10,Dexin Wang <[EMAIL PROTECTED]>写道:
>
> > You need to have your class file in this path
> >
> > /home/huyong/test/myudfs/UPPER.class
> >
> > since it's in myudfs directory.
> >
> >
> > On Jun 18, 2011, at 12:33 PM, 勇胡 <[EMAIL PROTECTED]> wrote:
> >
> > > I tried your command and then it shows me as following:
> > > /home/huyong/test/UPPER.class
> > > /home/huyong/test/UPPER.java
> > >
> > > Yong
> > > 在 2011年6月18日 下午4:29,Dmitriy Ryaboy <[EMAIL PROTECTED]>写道:
> > >
> > >> This usually hapens when you aren't registering what you think you are
> > >> registering.
> > >> try `jar tf /home/huyong/test/myudfs.jar | grep UPPER` and see if you
> > >> get anything.
> > >>
> > >> D
> > >>
> > >> 2011/6/18 勇胡 <[EMAIL PROTECTED]>:
> > >>> Hi,
> > >>>
> > >>> package myudfs;
> > >>> import java.io.IOException;
> > >>> import org.apache.pig.EvalFunc;
> > >>> import org.apache.pig.data.Tuple;
> > >>> import org.apache.pig.impl.util.*;
> > >>>
> > >>> public class UPPER extends EvalFunc<String>
> > >>> {
> > >>>   public String exec(Tuple input) throws IOException {
> > >>>       if (input == null || input.size() == 0)
> > >>>           return null;
> > >>>       try{
> > >>>           String str = (String)input.get(0);
> > >>>           return str.toUpperCase();
> > >>>       }catch(Exception e){
> > >>>           throw new IOException(e);
> > >>>       }
> > >>>   }
> > >>> }
> > >>>
> > >>> This is as same as the example from the Pig website. By the way, I
> also
> > >>> added the PIG_CLASS. But it still didn't work.
> > >>>
> > >>> Yong
> > >>>
> > >>> 2011/6/18 Jonathan Coveney <[EMAIL PROTECTED]>
> > >>>
> > >>>> Can you paste the content of the UDF?
> > >>>>
> > >>>> 2011/6/18 勇胡 <[EMAIL PROTECTED]>
> > >>>>
> > >>>>> Hello,
> > >>>>>
> > >>>>> I just tried the example from the pig udf manual step by step. But
> I
> > >> got
> > >>>>> the
> > >>>>> error information. Can anyone tell me how to solve it?
> > >>>>>
> > >>>>> grunt> REGISTER /home/huyong/test/myudfs.jar;
> > >>>>> grunt> A = LOAD '/home/huyong/test/student.txt' as
> (name:chararray);
> > >>>>> grunt> B = FOREACH A GENERATE myudfs.UPPER(name);
> > >>>>> 2011-06-18 11:15:38,892 [main] ERROR
> org.apache.pig.tools.grunt.Grunt
> > >> -
> > >>>>> ERROR 1070: Could not resolve myudfs.UPPER using imports: [,
> > >>>>> org.apache.pig.builtin., org.apache.pig.impl.builtin.]
> > >>>>> Details at logfile: /home/huyong/test/pig_1308388238352.log
> > >>>>>
> > >>>>> I have already registered the udf, why pig tries to search from the
> > >>>> builtin
> > >>>>> path.
> > >>>>>
> > >>>>> Thanks for your help!
> > >>>>>
> > >>>>> Yong Hu
> > >>>>>
> > >>>>
> > >>>
> > >>
> >
>