lambda_map_reduce
gem
A MapReduce implementation for use with lambdas.
Installation
Run gem install lambda_map_reduce
on the command line or add gem 'lambda_map_reduce'
to your project's
Gemfile
.
Usage
LambdaMapReduce.map_reduce
takes an Enumerable
, a mapper
lambda, and a
reducer
lambda.
The mapper
lambda is called once for every item in the Enumerable
. It
should take a single item and return an Array
of [key, value]
pairs.
The algorithm will shuffle all value
items with the same key
together, and
pass the resulting [key, Array of values] Arrays
to the reducer
, which
should return a single item.
The mapper
and reducer
may return nil
. The result of the algorithm is
the Array
of items produced from each reducer
call.
An example from the team_api
gem's CrossReferencer
class:
require 'lambda_map_reduce'
module TeamApi
class CrossReferencer
def self.create_tag_xrefs(site, items, category, xref_data)
items_to_tags = lambda do |item|
item_xref = xref_data.item_to_xref item
item[category].map { |tag| [tag, item_xref] } unless item[category].nil?
end
create_tag_xrefs = lambda do |tag, item_xrefs|
[tag, tag_xref(site, category, tag, item_xrefs)]
end
LambdaMapReduce.map_reduce(items, items_to_tags, create_tag_xrefs).to_h
end
end
end
Public domain
This project is in the worldwide public domain. As stated in CONTRIBUTING:
This project is in the public domain within the United States, and copyright and related rights in the work worldwide are waived through the CC0 1.0 Universal public domain dedication.
All contributions to this project will be released under the CC0 dedication. By submitting a pull request, you are agreeing to comply with this waiver of copyright interest.