Map Function in Erlang with PBC

Ryan Maclear ryan at
Wed Feb 9 08:22:09 EST 2011


I'm not sure if this is a riak or an erlang specific question. I'm guessing it's probably an erlang question.

I have the following erlang function in a module, mapreduce_play.erl (it's a silly skeleton function, but I'm just playing around):

get_objects(Server, Port, Bucket, FilterList) -> 
  {ok, Client} = riakc_pb_socket:start(Server, Port),
  Input = {Bucket, [FilterList]},

  MapFun = fun(Object, _KeyData, _Args) ->

  MapPhase = {map, {qfun, MapFun}, notused, true},
  Query = [MapPhase],
  riakc_pb_socket:mapred(Client, Input, Query).

If I copy the function body, line for line into the erlang shell, replacing values as I go along, the code works fine, and I get results back correctly.

However, If I call the function, in the same shell, I get the following error:

{error,<<"{error,\n    {error,undef,\n        [{#Fun<mapreduce_play.0.108144614>,\n          [{r_object,<<\"family\">>,<<"...>>}

This is not what I expected to happen. Has this got something to do with the nature of the anonymous function, one being defined in the shell and the other in a module? I've seen this link:

Which at the end of the post has the following :

"Of interest is the make_local_fun which creates a function reference which can be passed over to a remote node, without the remote node having a copy of this compiled code in its path"

So, why does passing the anonymous function defined in the shell work, but it fails when the anonymous function was defined inside a module?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the riak-users mailing list