It's even worse than just the missing package name.

When you create a jar, its root is supposed to be the root of your package tree.

So a class "com.foo.Bar" has to be in "com/foo/Bar.class" when you run
jar tf on the jarfile. If it's in "home/me/src/com/foo/Bar.class"  or
just in "Bar.class" or in "something/else/Bar.class" java won't find
it.

D

2011/6/19 Dexin Wang <wangde...@gmail.com>:
> 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 勇胡 <yongyong...@gmail.com>
>
>> 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 <wangde...@gmail.com>写道:
>>
>> > 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, 勇胡 <yongyong...@gmail.com> 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 <dvrya...@gmail.com>写道:
>> > >
>> > >> 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 勇胡 <yongyong...@gmail.com>:
>> > >>> 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 <jcove...@gmail.com>
>> > >>>
>> > >>>> Can you paste the content of the UDF?
>> > >>>>
>> > >>>> 2011/6/18 勇胡 <yongyong...@gmail.com>
>> > >>>>
>> > >>>>> 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
>> > >>>>>
>> > >>>>
>> > >>>
>> > >>
>> >
>>
>

Reply via email to