package My::Mapper; use Moose; with 'Hadoop::Mapper'; sub map { my ($self, $key, $value, $context) = @_; foreach my $word (split /\W/, $value) { next if not length $word; $context->write($word, 1); $context->counter("Articles", "Words", 1); } $context->counter("Articles", "Articles", 1); } package My::Reducer; use Moose; with 'Hadoop::Reducer'; sub reduce { my ($self, $key, $values, $context) = @_; my $sum = 0; while ($values->next) { $sum += $values->value; } $context->write($key, $sum); $context->counter("Articles", "Unique words", 1); } package main; use Hadoop::Runner; my $runner = Hadoop::Runner->new( mapper => My::Mapper->new(), reducer => My::Reducer->new(), input_format => 'KeyValueTextInputFormat'); $runner->run();