WordCount en Perl

Cette section comprend le code source et les instructions pour exécuter l'exemple WordCount écrit en Perl.

Voici le code source du mappeur. Enregistrez ce code dans un fichier appelé " WordCount_mapper.pl:
#!/usr/bin/env perl
foreach (<STDIN>) {
my @pair = split("\t", $_);
my @words = split(" ", $pair[1]);
foreach (@words) {
print "$_\t1\n";
}
}
Voici le code source du réducteur. Enregistrez ce code dans un fichier appelé " WordCount_reducer.pl:
#!/usr/bin/env perl
my $word = "";
my $sum = 0;
my $key = "";
my $value = "";
foreach (<STDIN>) {
my @pair = split("\t", $_);
$key = $pair[0];
$value = $pair[1];
if ($key eq $word) { $sum += $value; }
else {
if ($word ne "") { print "$word\t$sum\n"; }
$word = $key;
$sum = 1;
}
}
if ($key ne "") { print "$key\t$sum\n"; }
Pour exécuter cet exemple pour les données stockées dans la table words1 (qui comprend les colonnes id et sentence) au sein de la base de données " mapreduce_db, exécutez la commande suivante :
mapreduce jar /nz/export/ae/products/netezza/mapreduce/current/mapreducestreaming.
jar
-db mapreduce_db
-input 'words1' 'id' 'sentence'
-output 'results' 'word' 'count'
-mapper 'WordCount_mapper.pl'
-mapper_out_key_size 20
-mapper_out_value_size 20
-file <path to WordCount_mapper.pl file>
-reducer 'WordCount_reducer.pl'
-reducer_out_key_size 20
-reducer_out_value size 20
-file <path to WordCount_reducer.pl file>

Après exécution, la commande crée un tableau " results contenant deux colonnes : word et 'count, toutes deux de type VARCHAR(20).