pig-user  

Re: How to write an UDF to pass Two parameters to a UDF Filter function.........

Mridul Muralidharan
Fri, 29 Jan 2010 01:50:05 -0800


There are two ways to handle this.
You can pass it along as a parameter as you did in the script - though note that, in your udf, it will be a tuple with first field == category, second field == "1000010".

public Boolean exec(Tuple _input) throws IOException {
  String input = (String)_input.get(0);
  String compareStr = (String)_input.get(1);
  ...
}

But that might be a tad bit more expensive : since each tuple which gets passed through the FilterFunc will need to have the static "1000010" added to it.


A better alternative is to use "define" - and initialize your IsEqual class with the static param you need : by passing it through constructor.


Something like :


public class IsEqual extends FilterFunc {
  private String compareStr;

  public IsEqual(String compareStr){
    this.compareStr = compareStr;
  }

  public Boolean exec(Tuple input) throws IOException {
    String input = (String)_input.get(0);
    ...
  }
}


You use it by :


define MY_EQUAL IsEqual("1000010");

load 'data' as name,category using PigStorate("\t");
cameusers = filter data  by  MY_EQUAL(category);
store cameusers;





Hope this helps.
Regards,
Mridul


Ramana Venkata wrote:
Hi
 I want to create UDF which compares a tuple with a string value like this.

public class IsEqual extends FilterFunc {
    public Boolean exec(Tuple input,String str) throws IOException {
  // binary compary of AND is performed here;
 // if result of AND is not zero it will return true;
 return true;
}


is it possible with pig UDF ??;

Actually i want to compare two binary type data with AND operation as fallows

Table data is

ramana      1010101
krishna      1000010
venkata     1101010
......
load 'data' as name,category using PigStorate("\t");
cameusers = filter data  by  IsEqual(category,"1000010");
store cameusers;
-----------------------------------
result i am expected is ...............
krishna      1000010


Is there any other solution for this operation without UDF? can we
compare category column with binary data?


Please give responce..


thanks
ramanaiah