Does anyone have example code for mapreduce for Riak that can be run on a single Riak node.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
cd ~/riak
erl -name zed@127.0.0.1 -setcookie riak -pa apps/riak/ebin
In the shell:
# connect to the server
> {ok, Client} = riak:client_connect('riak@127.0.0.1').
{ok,{riak_client,'riak@127.0.0.1',<<6,201,208,64>>}}
# create and insert objects
> Client:put(riak_object:new(<<"groceries">>, <<"mine">>, ["eggs", "bacons"]), 1).
ok
> Client:put(riak_object:new(<<"groceries">>, <<"yours">>, ["eggs", "sausages"]), 1).
ok
# create Map and Reduce functions
> Count = fun(G, 'undefined', 'none') ->
[dict:from_list([{I, 1} || I <- riak_object:get_value(G)])]
end.
#Fun<erl_eval.18.105910772>
> Merge = fun(Gcounts, 'none') ->
[lists:foldl(fun(G, Acc) ->
dict:merge(fun(_, X, Y) -> X+Y end, G, Acc)
end, dict:new(), Gcounts)]
end.
#Fun<erl_eval.12.113037538>
# do the map-reduce
> {ok, [R]} = Client:mapred([{<<"groceries">>, <<"mine">>},
{<<"groceries">>, <<"yours">>}],
[{'map', {'qfun', Count}, 'none', false},
{'reduce', {'qfun', Merge}, 'none', true}]).
{ok,[{dict,...
> dict:to_list(R).
[{"eggs",2},{"susages",1},{"bacons",1}]
For the server I used absolutely default config:
$ hg clone http://hg.basho.com/riak/
$ cd riak
$ ./rebar compile generate
$ cd rel
$ ./riak/bin/riak start
回答2:
Here's an example of how to do a MapReduce using JavaScript functions.