Erlang Map/Reduce error

Kresten Krab Thorup krab at trifork.com
Tue Oct 4 05:24:15 EDT 2011


The error badfun most likely means that the function's code is not available inside Riak.

You need to add {add_paths, "/path/to/your/ebin"} in the riak_kv section in app.config.  Read more about it here http://wiki.basho.com/MapReduce.html#MapReduce-via-the-Erlang-API

For an explanation of why the badfun happens, you can read this blog:
http://www.javalimit.com/2010/05/passing-funs-to-other-erlang-nodes.html
... which can also give you an idea to how to do it without loading the code into riak, i.e. something like this may likely work, but will invoke the interpreter inside riak; which may be too slow for your needs.

Kresten


1> FunStr = "fun(O, undefined, none) -> [riak_object:get_value(O)] end.".
2> {ok, Tokens, _} = erl_scan:string(FunStr).
3> {ok, [Form]} = erl_parse:parse_exprs(Tokens).
4> Bindings = erl_eval:add_binding('B', 2, erl_eval:new_bindings()).
5> {value, Fun, _} = erl_eval:expr(Form, Bindings).
6> C:mapred([{<<"buck">>, <<"key1">>}, {<<"buck">>, <<"key2">>}], [{map, {qfun, Fun}, none, true}]).


Kresten




On Oct 4, 2011, at 11:00 AM, Lyes Amazouz wrote:

Hi everybody,

I'm learning how to execute a map/reduce using the riak_client module, so I tried this:

>Map = fun(O, undefined, none) -> [riak_object:get_value(O)] end.
>C:mapred([{<<"buck">>, <<"key1">>}, {<<"buck">>, <<"key2">>}], [{map, {qfun, Map}, none, true}]).

but I got  this error:

{error,{error,{badfun,#Fun<erl_eval.18.59269574>},
              [{riak_kv_mapper,run_map,9},
               {riak_kv_mapper,'-do_map/2-fun-0-',9},
               {lists,foldl,3},
               {riak_kv_mapper,do_map,2},
               {gen_fsm,handle_msg,7},
               {proc_lib,init_p_do_apply,3}]}}

What is wring with my code??
_______________________________________________
riak-users mailing list
riak-users at lists.basho.com<mailto:riak-users at lists.basho.com>
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com




More information about the riak-users mailing list