s/to things/two things/ ;)

Tushar



On Sun, Apr 19, 2009 at 6:20 PM, Tushar Jain <tushar.j...@gmail.com> wrote:
> 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?
>>>>>>
>>>>>
>>>>>
>>>
>>>
>>
>>
>

Reply via email to