Skip to content

Commit d65a050

Browse files
committed
import of blaine's mapreducerb
0 parents  commit d65a050

File tree

3 files changed

+59
-0
lines changed

3 files changed

+59
-0
lines changed

‎README‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
By Blaine Cook.
2+
3+
http://romeda.org/blog/2007/04/mapreduce-in-36-lines-of-ruby.html
4+
5+
If you want to add `dinject` (reduce) please do.
6+
7+
In your shell:
8+
$ sudo gem install RingyDingy
9+
$ sudo gem install ruby2ruby
10+
$ ring_server &
11+
$ ruby mapreduce_runner &
12+
$ ruby mapreduce_runner &
13+
14+
In IRB:
15+
>> require 'mapreduce_enumerable'
16+
>> (1..100).to_a.dmap { |v| v * 2 }

‎mapreduce_enumerable.rb‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
require 'rubygems'
2+
require 'ringy_dingy'
3+
require 'ruby2ruby'
4+
5+
module Enumerable
6+
def dmap(&block)
7+
self.each_with_index do |element,idx|
8+
ring_server.write([:dmap, Process.pid, block.to_ruby, element, idx])
9+
end
10+
11+
results = []
12+
while results.size < self.size
13+
result, idx = ring_server.take([:dmap, Process.pid, nil, nil]).last(2)
14+
results[idx] = result
15+
end
16+
17+
results
18+
end
19+
20+
def ring_server
21+
return @ring_server if @ring_server
22+
23+
ringy_dingy = RingyDingy.new nil
24+
@ring_server = ringy_dingy.ring_server
25+
end
26+
end

‎mapreduce_runner.rb‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
require 'rubygems'
2+
require 'ruby2ruby'
3+
require 'ringy_dingy'
4+
5+
ringy_dingy = RingyDingy.new nil
6+
ring_server = ringy_dingy.ring_server
7+
8+
loop do
9+
pid, block, element, idx = ring_server.take([:dmap, nil, nil, nil, nil]).last(4)
10+
begin
11+
result = eval(block).call(element)
12+
rescue Object => err
13+
result = err
14+
end
15+
puts "Got #{result} from #{element} for #{pid}."
16+
ring_server.write([:dmap, pid, result, idx])
17+
end

0 commit comments

Comments
 (0)