On Mon, Jan 19, 2009 at 6:15 PM, Jeff Hinrichs - DM&T
<[email protected]> wrote:
> On Mon, Jan 19, 2009 at 8:24 PM, Jeff Hinrichs - DM&T
> <[email protected]> wrote:
>>
>>
>> On Mon, Jan 19, 2009 at 6:25 PM, Paul Davis <[email protected]>
>> wrote:
>>>
>>> On Mon, Jan 19, 2009 at 7:15 PM, Jeff Hinrichs - DM&T
>>> <[email protected]> wrote:
>>> > Using couchdb-python 0.5 and couchdb 0.9.0a735191-incubating
>>> >
>>> > I am working on a "rosetta stone" for javascript and python views.
>>> > (nothing
>>> > like rewriting in a different language to lean something<g>) I've worked
>>> > though the simple map only views. I then did a simple reduce(keys,vals)
>>> > which worked out fine. But I am stumped on rereduce when the function
>>> > signature includes keys,vals,rereduce. I've been trying to work through
>>> > the
>>> > js code from "Top N Tags" from the snippets page,
>>> > http://wiki.apache.org/couchdb/View_Snippets
>>> >
>>> > In particular, I am confused as to what is passed to the rereduce function
>>> > when rereduce=True. The javascript is returning a complex structure
>>> > instead
>>> > of a simple scalar, I see that it has to do with getting state back from a
>>> > previous reduce operation, but I'm confused. The unpacking of the previous
>>> > results, I think has me befuddled ;(
>>> >
>>>
>>> The reduce function is always returning a structure of the form:
>>>
>>> {
>>> "tag1": N1,
>>> "tag2": N2,
>>> ...
>>> }
>>>
>>> When you get to rereduce=true, then the values array is an array of
>>> the structures that your code needs to combine.
>>>
>>> And for berevity, the last bit of code outside the if statement is
>>> just discarding all tags below the top N so that the growth of data
>>> doesn't exceed the log(num_rows) rule.
>>>
>>> HTH,
>>> Paul Davis
>>>
>> That make sense from what I am reading. thanks.
>> Any idea about the python view server from couchdb-python? The values tuple
>> being returned works just fine however, the keys tuple, which appears to be
>> a tuple of tuples is causing my reduce function to fail silently whenever I
>> try to access an element by index.
>>
>> keys looks like [[tag, object_id],[tag, object_id],...]
>>
>> However when I try to access keys[0] (should be [tag, object_id]) or
>> keys[0][0] (should be 'tag') my reduce script silently fails. If I just
>> ignore tags and sum the values in a simple map/reduce I get the correct
>> counts as simple vectors or atleast the same answer as the javascript
>> equivalent. I'm hoping CMLenz will join the discussion or someone point me
>> in the proper direction.
>>
>> Regards,
>>
>> Jeff
>
> Ok, answering my own post -- you bang on your keyboard long enough and
> you just might keep up with the monkeys<g>
>
> I'm getting closer --
> def reduce(keys,vals,rereduce):
> tags = {}
> if not rereduce:
> for i in range(len(keys)):
> tags[keys[i][0]] = tags.get(keys[i][0],0) + vals[i]
>
> else:
> tags = vals[0]
> for i in range(1,len(vals)):
> return vals
> #tags[val[i][0]] += tags.get(val[i][0],0) + val[i][1]
>
> return tags
>
Never used the python view server, but I think what you're wanting is
something along the lines of:
def reduce(keys, vals, rereduce):
N = 5 # N top tags to return
tags = {}
if(!rereduce):
for k, v in zip(keys, vals):
tags[k] += v
else:
tags = vals[0]
for obj in vals[1:]:
for k, v in obj.iteritems():
tags[k] = tags.get(k, 0) + v
keepers = list(tags.keys())
keepers.sort(key=lambda x: tags.get(x), reverse=True)
return dict([(k, tags[k]) for k in keepers[:N]);
> get's me partially reduced to:
> -Key- - Value-
> "cool" {cool: 49}
> "couchdb" {couchdb: 46}
> "hopeful" {hopeful: 1}
> "hot" [{hot: 30}, {hot: 38}]
> "neat" {neat: 50}
> "python" [{python: 25}, {python: 26}]
>
> I've just go to do the proper thing with the lists of values for those
> tags like hot and python. I'm off for tonight and I'll finish up in
> the morning. I just didn't want someone wasting their time answering
> a question that I've already muddle my way through -- map &
> map/reduce is a wiki topic but rereduce is a topic by itself ;)
>
> keeping-up-with-the-shakespearian-monkeys-mostly'ly
>
> Jeff
>