当前位置:  开发笔记 > 编程语言 > 正文

使用Riak进行Mapreduce

如何解决《使用Riak进行Mapreduce》经验,为你挑选了1个好方法。

有没有人为Riak提供mapreduce的示例代码,可以在单个Riak节点上运行.



1> Zed..:
cd ~/riak
erl -name zed@127.0.0.1 -setcookie riak -pa apps/riak/ebin

在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
> 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

# 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


是的,你是对的,我替换了Strings的原子,我现在的代码工作.
推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有