MapReduce riak

38701 단어 mapreduce
1. 오늘 riak의 mapred/3/4/5 방법을 보았는데 다음과 같은 몇 가지 주의해야 할 점을 살펴보았다.
 
 
mapred(Pid::pid(), Inputs::mapred_inputs() , Query::[ mapred_queryterm() ]) -> {ok,  mapred_result() } | {error, {badqterm,  mapred_queryterm() }} | {error, timeout} | {error, term()}
Equivalent to  mapred(Inputs, Query, default_timeout(mapred)) .
 

mapred_inputs () 이게 이해가 돼요.


mapred_inputs() = [{ bucket()key() } | { bucket()key() , term()}] | {modfun, Module::atom(), Function::atom(), [term()]} |  bucket()  | {index,  bucket() , Index::binary(),  key() } | {index, bucket() , Index::binary(), StartKey::key() , EndKey::key() }
 

mapred_queryterm()


mapred_queryterm() = {map,  mapred_funterm() , Arg::term(), Accumulate::boolean()} | {reduce,  mapred_funterm() , Arg::term(), Accumulate::boolean()} | {link, Bucket::riakc_obj:bucket() , Tag::term(), Accumulate::boolean()}
이 매개 변수를 이해하는 데는 시간이 좀 걸린다
{map,  mapred_funterm() , Arg::term(), Accumulate::boolean()} 
 

mapred_funterm()


mapred_funterm() = {modfun, Module::atom(), Function::atom()} | {qfun, function()} | {strfun, list() | binary()}
{qfun,function ()}
 
 
 Count = fun(G, undefined, none) ->
             [dict:from_list([{I, 1}
              || I <- binary_to_term(riak_object:get_value(G))])]
           end.

 
여기의 undefined는 실제 입력 매개 변수 {bucket(),key(),term ()}의 term입니다. 기본값은 undefined입니다.
여기의 none은 실제query 매개 변수 [{map, {qfun,Count},none,false},의 none
 
1> {ok, Client} = riakc_pb_socket:start("127.0.0.1", 8087).
2> Mine = riakc_obj:new(<<"groceries">>, <<"mine">>,
                        term_to_binary(["eggs", "bacon"])).
3> Yours = riakc_obj:new(<<"groceries">>, <<"yours">>,
                         term_to_binary(["bread", "bacon"])).
4> riakc_pb_socket:put(Client, Yours, [{w, 1}]).
5> riakc_pb_socket:put(Client, Mine, [{w, 1}]).

Now that we have a client and some data, let’s run a query and count how many occurances of groceries.
6> Count = fun(G, undefined, none) ->
             [dict:from_list([{I, 1}
              || I <- binary_to_term(riak_object:get_value(G))])]
           end.
7> Merge = fun(Gcounts, none) ->
             [lists:foldl(fun(G, Acc) ->
                            dict:merge(fun(_, X, Y) -> X+Y end

좋은 웹페이지 즐겨찾기