[ https://issues.apache.org/jira/browse/PIG-552?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12653120#action_12653120 ]
Christopher Olston commented on PIG-552: ---------------------------------------- I am defining an EvalFunc and using it in FOREACH. There is no sorting going on here. For some reason Pig tries to check whether it is a CompareFunc, and that check causes an exception to be thrown because it passes a bogus string to the classloader. Seems to me this is a serious bug that needs to be fixed. > UDF defined with argument causes class instantiation exception > -------------------------------------------------------------- > > Key: PIG-552 > URL: https://issues.apache.org/jira/browse/PIG-552 > Project: Pig > Issue Type: Bug > Affects Versions: types_branch > Reporter: Christopher Olston > Attachments: pig.patch > > > I'm doing: > define myFunc myFunc('blah'); > b = foreach a generate myFunc(*); > Pig parses it, but fails when it tries to run it on hadoop (I'm using "local" > mode). It tries to invoke the class loader on "myFunc('blah')" instead of on > "myFunc", which causes an exception. > The bug seems to stem from this part of JobControlCompiler.getJobConf(): > if(mro.UDFs.size()==1){ > String compFuncSpec = mro.UDFs.get(0); > Class comparator = > PigContext.resolveClassName(compFuncSpec); > if(ComparisonFunc.class.isAssignableFrom(comparator)) { > > jobConf.setMapperClass(PigMapReduce.MapWithComparator.class); > > jobConf.setReducerClass(PigMapReduce.ReduceWithComparator.class); > jobConf.set("pig.reduce.package", > ObjectSerializer.serialize(pack)); > jobConf.set("pig.usercomparator", "true"); > jobConf.setOutputKeyClass(NullableTuple.class); > jobConf.setOutputKeyComparatorClass(comparator); > } > } else { > jobConf.set("pig.sortOrder", > ObjectSerializer.serialize(mro.getSortOrder())); > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.