Could you try to things, just to further test your theory that the equals is whats failing:
1. Log the value of the key (so the result of key.toString()), just to see what it is. 2. Do as below: Test sexKey = new Text("sex"); if(key.equals(sexKey)) { . . } These 2 should atleast help confirm or deny your theory. Hope this helps Tushar On Sun, Apr 19, 2009 at 9:54 AM, Reza <pdp...@eden.rutgers.edu> wrote: > Hey Brian: > > I tried that as well, but to no avail . =[. > > -Reza > >> Hm, >> >> I don't know how equals() is implemented for Text, but I'd try: >> >> key.toString().equals("sex") >> >> Brian >> >> On Apr 19, 2009, at 11:29 AM, Reza wrote: >> >>> Brian: >>> >>> Thanks for your response. >>> >>> I have 8 total keys and values. The code I show below is part of the >>> whole >>> thing, just to illustrate my problem. >>> >>> Im trying to call each key with an if statement (as in the piece I >>> showed >>> before). Each of my 8 keys have their respective if statement. >>> >>> However, it seems that my if statement is not going through. I even >>> put >>> the output.collect(...) inside the if statement, and accordingly, no >>> output was shown. I already tested my mapper, and it seems to work >>> fine. >>> >>> I believe that I am having difficulty at this point: >>> >>> if (key.equals("sex")) {...} >>> >>> The key in this case is "sex" (or gender) and the possible values >>> are 0 >>> (for male) and 1 (for female). Is this not the right way to separate >>> out >>> my keys? >>> >>> -Reza >>> >>>> Hey Reza, >>>> >>>> From reading your code, you are calling this for the key "sex": >>>> >>>> output.collect("The total population is: ", (actual population)) >>>> >>>> and, for every other key: >>>> >>>> output.collect("The total population is: ", 0) >>>> >>>> You probably only want to call the output collector in the first >>>> case, >>>> not every time. >>>> >>>> Brian >>>> >>>> >>>> On Apr 18, 2009, at 12:21 PM, Reza wrote: >>>> >>>>> Hello all: >>>>> >>>>> I am new to Hadoop and Map Reduce. I am writing a program to analyze >>>>> some >>>>> census data. >>>>> >>>>> I have a general question with MapReduce: >>>>> >>>>> In the Reducer, how can I separate keys to do separate calculations >>>>> based >>>>> on the key? In my case, I am trying to use if statements to separate >>>>> the >>>>> keys out, but for some reason, it is not doing so. >>>>> >>>>> Here is a segment of my code. My mapper seems to work, I think it is >>>>> my >>>>> Reducer that is messing up: >>>>> >>>>> public static class MapClass extends MapReduceBase implements >>>>> Mapper<LongWritable, Text, Text, IntWritable> { >>>>> >>>>> // private final static IntWritable one = new IntWritable(1); >>>>> Text sex = new Text("sex"); >>>>> public void map(LongWritable key, Text value, >>>>> OutputCollector<Text, IntWritable> output, >>>>> Reporter reporter) throws IOException { >>>>> String line = value.toString(); >>>>> StringTokenizer itr = new StringTokenizer(line,","); >>>>> >>>>> : >>>>> : >>>>> word.set(itr.nextToken()); >>>>> IntWritable sexVal = new >>>>> IntWritable(Integer.parseInt(word.toString())); //map gender >>>>> output.collect(sex, sexVal); >>>>> >>>>> }//end map()method >>>>> }//end class MapClass >>>>> >>>>> >>>>> public static class Reduce extends MapReduceBase >>>>> implements Reducer<Text, IntWritable, Text, IntWritable> { >>>>> >>>>> >>>>> public void reduce(Text key, Iterator<IntWritable> values, >>>>> OutputCollector<Text, IntWritable> output, >>>>> Reporter reporter) throws IOException { >>>>> >>>>> int totalPop = 0; //count: total population >>>>> int numMales = 0; //count: males >>>>> int numFemales = 0; //count: females >>>>> Text popOut = new Text("The total population is: >>>>> "); >>>>> if (key.equals("sex")) { >>>>> while (values.hasNext()) { >>>>> if (values.next().get() == 0) >>>>> numMales++; //number >>>>> of males >>>>> else >>>>> numFemales++; //number >>>>> of >>>>> females >>>>> }//end while >>>>> totalPop = numMales + numFemales; //count of >>>>> population >>>>> }//end if >>>>> output.collect(popOut, new IntWritable(totalPop)); >>>>> >>>>> }//end reduce method >>>>> }//end class Reduce >>>>> >>>>> key is of type Text, I also used: if (key.toString() == "sex) {.... >>>>> but that wasnt working either. >>>>> >>>>> There are of course other keys and values, but I would think to >>>>> gather all >>>>> the keys "sex" would be done with the way I show it above. However, >>>>> My >>>>> output reads as 0. I tried changing the numMales value to see if >>>>> the if >>>>> statement is executed, but it is not. Am I doing something wrong? >>>>> >>>> >>>> >> >> > >