Thanks St.Ack for the further comments and for putting a link in the Wiki.
Naama
On Tue, Jul 1, 2008 at 8:38 PM, stack <[EMAIL PROTECTED]> wrote:
> Comments in-line below:
>
> Naama Kraus wrote:
>
>> Here is an updated code
>>
>> Naama
>>
>> /**
>> * <pre>
>> * 'Toy tables' for experiencing with MapReduce over HBase
>>
>>
> Do you mean 'experimenting' in the above?
>
> ....
>
>> public void create() throws IOException {
>>
>>
>
> Where does this method get called? I don't see it.
>
>
> System.out.println("Grades Table populated");
>>
>>
>
> Do you want to set up a logger to do the outputting instead? See the head
> of (most) hbase classes for example. Look for 'LOG'.
>
>
> }
>> }
>>
>>
>> ====================================================
>>
>> /**
>> * A map reduce job over [EMAIL PROTECTED] GradesTable}
>> * The job produces for each course the average grade in that course.
>> * It puts the average in a separate table which holds course statistics.
>> *
>> */
>> public class GradesTableMapReduce extends Configured implements Tool {
>>
>> /**
>> * Map a row to {key, value} pairs.
>> * Emit a {course, grade} pair for each course grade appearing in the
>> student row.
>> * E.g. Sara {Math:62, Art:45, Sports:87} -> {Math, 62}, {Art, 45},
>> {Sports, 87}
>> *
>> */
>> public static class GradesTableMap extends TableMap<Text, IntWritable> {
>>
>> @Override
>> public void map(HStoreKey key, MapWritable value,
>> OutputCollector<Text, IntWritable> output, Reporter reporter)
>> throws
>> IOException {
>>
>> // Walk through the columns
>> for (Map.Entry<Writable, Writable> e: value.entrySet()) {
>> // Column name is course name
>> Text course = (Text) e.getKey();
>> // Remove the family prefix
>> String courseStr = course.toString();
>> courseStr =
>> courseStr.substring(courseStr.indexOf(':') + 1);
>>
>>
>
> There may be utility in HStoreKey to do the above stripping of the column
> family (getQualifier?).
>
> course = new Text(courseStr);
>> byte [] gradeInBytes = ((ImmutableBytesWritable)
>> e.getValue()).get();
>> DataInputStream in = new DataInputStream(new
>> ByteArrayInputStream(gradeInBytes));
>> IntWritable grade = new IntWritable();
>> grade.readFields(in);
>>
>>
>
> You could have used Writables.getWritable above and saved yourself a few
> lines (Not important).
>
> Otherwise, this class is an excellent example of using MR + HBase. I've
> add a pointer to it up on the wiki under the MR+HBase page (update the link
> if you update your code).
>
> Thanks,
> St.Ack
>
--
oo 00 oo 00 oo 00 oo 00 oo 00 oo 00 oo 00 oo 00 oo 00 oo 00 oo 00 oo 00 oo
00 oo 00 oo
"If you want your children to be intelligent, read them fairy tales. If you
want them to be more intelligent, read them more fairy tales." (Albert
Einstein)