代码之家  ›  专栏  ›  技术社区  ›  yazz.com

带RIAK的MapReduce

  •  3
  • yazz.com  · 技术社区  · 15 年前

    是否有任何人具有可以在单个RIAK节点上运行的用于RIAK的MapReduce示例代码?

    2 回复  |  直到 15 年前
        1
  •  5
  •   Zed    15 年前
    cd ~/riak
    erl -name zed@127.0.0.1 -setcookie riak -pa apps/riak/ebin
    

    壳牌:

    # 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}]
    

    对于服务器,我使用了绝对默认的配置:

    $ hg clone http://hg.basho.com/riak/
    $ cd riak
    $ ./rebar compile generate
    $ cd rel
    $ ./riak/bin/riak start
    
        2
  •  2
  •   Augustus    15 年前

    这里有一个 example 如何使用javascript函数执行mapreduce。