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