Addendum:

In the interest of completeness, it's worth noting that the Erlang
builtins are here:

https://github.com/basho/riak_kv/blob/master/src/riak_kv_mapreduce.erl

Mark

On Sun, Sep 16, 2012 at 5:08 PM, Mark Phillips <[email protected]> wrote:
> Hi Deepak,
>
> I can answer one of two questions here...
>
> On Fri, Sep 14, 2012 at 9:42 AM, Deepak Balasubramanyam
> <[email protected]> wrote:
>> Thanks for the tip Russell. I managed to get this done.
>>
>> I have one more question and a suggestion.
>>
>> Is the name keyData a misnomer in the mapping function ->  function(value,
>> keyData, arg)  ? keyData is a String that carries the bucket name. The value
>> object carries more information. value[0].data represents the data itself
>> among other properties that represent user metadata; riak links; indexes;
>> key; etc etc.
>> If mapValuesJson: function(value, keyData, arg) can take an input argument
>> and use it to add a json property whose value is the riak key, a custom
>> function would not be necessary. It would be a neat little system feature
>> which I take would need amendments to mapred_builtins.js.
>>
>> Is riak_kv the repo to make contributions to system built functions ? There
>> are quite a few open pull requests on that repo, so I'm not sure where this
>> change should go.
>>
>
> The riak_kv repo is indeed the repo you want for this. Specifically,
> you'll want to start here:
>
> https://github.com/basho/riak_kv/blob/master/priv/mapred_builtins.js
>
> As far as the large queue of pull requests go, we're working on
> merging/addressing the backlog (for this and a few other repos). Send
> yours our way. It'll get some love when time allows.
>
> Thanks.
>
> Mark
>
>
>>
>> Thanks
>> Deepak Bala
>>
>> On Fri, Sep 14, 2012 at 7:16 PM, Russell Brown <[email protected]> wrote:
>>>
>>>
>>> On 14 Sep 2012, at 14:24, Deepak Balasubramanyam wrote:
>>>
>>> > Hi,
>>> >
>>> > I've written a map reduce query on the riak java client like so...
>>> >
>>> > client.mapReduce(BUCKET).addKeyFilter(keyFilter)
>>> >                     .addLinkPhase(BUCKET, "_", false)
>>> >                     .addMapPhase(new
>>> > NamedJSFunction("Riak.mapValuesJson"), false)
>>> >                     .addReducePhase(phaseFunction).execute();
>>> > Collection<MyType> types = result.getResult(MyType.class);
>>> >
>>> > This is the class definition for MyType
>>> >
>>> > public class MyType
>>> > {
>>> >     @RiakKey
>>> >     private String myKey;
>>> >     private String property1;
>>> >     private String property2;
>>> >
>>> >     /*  Getters / Setters go here */
>>> > }
>>> >
>>> > When the object mapper deserializes the results into Collection<MyType>,
>>> > none of the types have the myKey property populated in them. When I 
>>> > debugged
>>> > the calls made by riak I realized that the result of the /mapred call does
>>> > not contain any key information in the body. It only contains the value 
>>> > that
>>> > each key represents. So that explains why the keys are null in the result.
>>>
>>> The Java client doesn't add the value of the @RiakKey field to the value
>>> stored in riak.
>>>
>>> >
>>> > On the contrary, a link walk in riak returns the Location header for
>>> > each multipart form entry in the response (Location: /riak/bucket/key). 
>>> > So I
>>> > guess there is at least some way to tweak a client to parse the location 
>>> > to
>>> > get the keys, but you lose out on the map-reduce goodness.
>>> >
>>> > Is there some way a map-reduce query can be formed to allow the
>>> > resulting type's RiakKey to be populated ? What are my options ?
>>>
>>> A custom Map function may do what you want. Get the Key from the Key Data
>>> passed to the Map function and add it to the JSON value returned. Jackson
>>> should then take care of de-serialising it into your values.
>>>
>>> Cheers
>>>
>>> Russell
>>>
>>> >
>>> > Thanks
>>> > Deepak Bala
>>> > _______________________________________________
>>> > riak-users mailing list
>>> > [email protected]
>>> > http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>>
>>
>>
>> _______________________________________________
>> riak-users mailing list
>> [email protected]
>> http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
>>

_______________________________________________
riak-users mailing list
[email protected]
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com

Reply via email to