diff options
author | franck cuny <franck@lumberjaph.net> | 2010-06-16 11:49:34 +0200 |
---|---|---|
committer | franck cuny <franck@lumberjaph.net> | 2010-06-16 11:49:34 +0200 |
commit | 859212604e96818f5ec0b45c01d83bf2934c6697 (patch) | |
tree | 7d7e950b16088335198f89ebbed863f749f43b4b /eg | |
parent | add get_keys; change params default in get_properties; add POD (diff) | |
download | net-riak-859212604e96818f5ec0b45c01d83bf2934c6697.tar.gz |
add three map/reduce operations (from the fast track)
Diffstat (limited to 'eg')
-rw-r--r-- | eg/mapred_01.pl | 26 | ||||
-rw-r--r-- | eg/mapred_02.pl | 27 | ||||
-rw-r--r-- | eg/mapred_03.pl | 43 |
3 files changed, 96 insertions, 0 deletions
diff --git a/eg/mapred_01.pl b/eg/mapred_01.pl new file mode 100644 index 0000000..76e26b2 --- /dev/null +++ b/eg/mapred_01.pl @@ -0,0 +1,26 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.010; + +use Net::Riak; + +my $riak = Net::Riak->new(); +my $result; + +$result = $riak->add('goog')->map(get_day_where_high_is('600.00'))->run; +say "days where high is over 600:"; +map { say $_ } sort {$a cmp $b } @$result; + +sub get_day_where_high_is { + my $val = shift; +" +function(value, keyData, arg) { + var data = Riak.mapValuesJson(value)[0]; + if(data.High && data.High > $val) + return [value.key]; + else + return []; +} +"; +} diff --git a/eg/mapred_02.pl b/eg/mapred_02.pl new file mode 100644 index 0000000..31ab0eb --- /dev/null +++ b/eg/mapred_02.pl @@ -0,0 +1,27 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.010; + +use YAML; +use Net::Riak; + +my $riak = Net::Riak->new(); +my $result; + +$result = $riak->add('goog')->map(days_where_close_is_lower_than_open())->run; +say "days where close is lower than open"; +map { say $_ } sort {$a cmp $b} @$result; + +sub days_where_close_is_lower_than_open { + " +function(value, keyData, arg) { + var data = Riak.mapValuesJson(value)[0]; + if(data.Close < data.Open) + return [value.key]; + else + return []; +} +"; +} + diff --git a/eg/mapred_03.pl b/eg/mapred_03.pl new file mode 100644 index 0000000..228260b --- /dev/null +++ b/eg/mapred_03.pl @@ -0,0 +1,43 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.010; + +use Net::Riak; + +my $riak = Net::Riak->new(); +my $result; + +$result = + $riak->add('goog')->map(map_max_daily_variance()) + ->reduce(reduce_max_daily_variance())->run; +say "max daily variance"; +map { say $_ . " => ". $result->[0]->{$_} } sort {$a cmp $b} keys %{$result->[0]}; + +sub map_max_daily_variance { + " +function(value, keyData, arg){ + var data = Riak.mapValuesJson(value)[0]; + var month = value.key.split('-').slice(0,2).join('-'); + var obj = {}; + obj[month] = data.High - data.Low; + return [ obj ]; +} +"; +} + +sub reduce_max_daily_variance { + " +function(values, arg){ + return [ values.reduce(function(acc, item){ + for(var month in item){ + if(acc[month]) { acc[month] = (acc[month] < item[month]) ? item[month] : acc[month]; } + else { acc[month] = item[month]; } + } + return acc; + }) + ]; +} +"; +} + |