Maybe I misunderstand how MR works or maybe it is a problem with the Ruby
client. I am trying to run the following job that will filter the keys as
the first phase. I am not using key filter, as the input will be a search
query. But whatever I dod, the filtering reduce phase does not appear to
have any effect. As a minimal example, in the reduce filter phase I simply
return an empty array, which I believe should stop any further processing,
but the job continues to return data.
For instance:
mr = Riak::MapReduce.new(riak)
mr.add('bucket', 'key')
mr.reduce("function(v) { return [] }", :keep => true))
This returns:
{"bucket"=>"key"}
Doing instead:
mr = Riak::MapReduce.new(riak)
mr.add('bucket', 'key')
mr.reduce("riak_kv_mapreduce:reduce_identity", :language => "erlang")
mr.reduce("function(v) { return [] }", :keep => true))
results in the same output.
If I place a map phase before the reduce phase:
mr = Riak::MapReduce.new(riak)
mr.add('bucket', 'key')
mr.map("function(v,e){ return [ v.bucket, v.key, e ] }")
mr.reduce("function(v) { return [] }", :keep => true)
mr.run
I get the expected output, an empty array: []. But this defeats the purpose,
which is to filter the keys in the reduce phase before the objects are
fetched from disk.
Can't a reduce phase appear before a map phase?
If it can, what am I doing wrong? Or is this a bug? Using Riak 1.0.0.
Elias
_______________________________________________
riak-users mailing list
[email protected]
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com