Prashant,

I followed as directed by you but i am getting the following error:

2012-05-10 06:40:38,097 [main] ERROR org.apache.pig.tools.grunt.Grunt -
ERROR 1045: Could not infer the matching function for Dudf_try as multiple
or none of them fit. Please use an explicit cast.

Detailed Error Log and code is is attached.

Thanks,
Dipesh

On Thu, May 10, 2012 at 12:39 AM, Prashant Kommireddi
<[email protected]>wrote:

> Dipesh,
>
> You can pass in the entire tuple (row) to the UDF.
>
> unintended = foreach player generate name, id, Dudf_try(*);
>
> And the UDF now will be able to use the entire row :
>
> Tuple tuple = (Tuple)input.get(0);
>
> To process individual fields, you can iterate or positionally access the
> above tuple.
>
> String name = tuple.get(0).toString();
> String id = tuple.get(1).toString();
>
> -Prashant
>
>
> On Wed, May 9, 2012 at 12:00 PM, DIPESH KUMAR SINGH
> <[email protected]>wrote:
>
> > (Yet another basic udf question)
> >
> > I want my udf to take values of all the columns in a row.
> >
> > For example: If there are 3 records in my input file. (Tab delimited row)
> >
> > John   12
> > Jeff     33
> > Chin    20
> >
> > Currently my UDF could only take one, (I don't know how to do more than
> > one):
> >
> > *register 'dudf.jar';**
> > **player = load '/pig_data/dxmlsample1.txt' as (name:chararray,
> > id:chararray);*
> > *-- As i have only passed name here, I want whole row to be passed, i.e.
> > name and id. (here)**
> > **unintended = foreach player generate name, id, Dudf_try(name);**
> > **dump unintended;*
> >
> > My UDF code is:
> >
> > *import java.io.IOException;**
> > **import java.util.List;**
> > **import java.util.ArrayList;**
> > **
> > **import org.apache.pig.EvalFunc;**
> > **import org.apache.pig.FuncSpec;**
> > **import org.apache.pig.data.Tuple;**
> > **import org.apache.pig.data.DataType;**
> > **import org.apache.pig.impl.logicalLayer.schema.Schema;**
> > **import org.apache.pig.impl.logicalLayer.FrontendException;**
> > **
> > **public class Dudf_try extends EvalFunc<String> {**
> > ** public String exec(Tuple input) throws IOException {**
> > ** if(input == null || input.size() == 0)**
> > ** return null;**
> > ** try{**
> > ** String query = (String)input.get(0);**
> > **  //String query1 = (String)input.get(1);**
> > ** **
> > ** // Some more transformation here , but ultimate Output is String**
> > ** **
> > ** return query+"<>"+query1;**
> > ** }catch(Exception e){**
> > ** System.err.println("failed to process input; error - " +
> > e.getMessage());
> > **
> > ** return null;**
> > ** }**
> > ** }**
> > **
> > ** @Override**
> > ** public Schema outputSchema(Schema input) {**
> > ** return new Schema(new
> > Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(),
> > input), DataType.CHARARRAY));**
> > ** }**
> > **
> > ** @Override**
> > ** public List<FuncSpec> getArgToFuncMapping() throws FrontendException
> {**
> > ** List<FuncSpec> funcList = new ArrayList<FuncSpec>();**
> > ** funcList.add(new FuncSpec(this.getClass().getName(), new Schema(new
> > Schema.FieldSchema(null, DataType.CHARARRAY))));**
> > **
> > ** return funcList;**
> > ** }**
> > **
> > **}*
> > *
> > *
> >
> > I need some suggestion here on how to proceed with the intended.
> >
> > Thanks!
> > Dipesh
> >
> > --
> > Dipesh Kr. Singh
> >
>



-- 
Dipesh Kr. Singh

Reply via email to