比如说有两个班级,A班和B班
Class score
A 10
A 7
A 9
B 5
B 6
B 3
所谓的开窗函数的开窗就是把所有的A和所有的B往两个地方进行处理,像是送到两个窗口进行处理。
Hadoop会把所有A和所有B两块数据进行处理,保证每块数据都在同一个reduce上面进行处理,为什么会这样呢,因为使用了分区函数partition by class
不过两块数据也可能在同一个reduce上面执行,也可能不会
这里的作用就是partition by这个函数做到的
合起来的一个字段就当作一个分区进行处理,然后对该分区的asso_access_num进行排序处理,然后每个分区进行排序后再合在起来,然后rownum进行依次的判断,
第一个是A则rownum=1
第二个是A则rownum=2
第三个是A则rownum=3
第四个是B,因为class变了,所以rownum又变为1,rownum=1
第五个是B则rownum=2,依次类推
如果你要得到前面两条的话,就写rownum<=2即可,那么rownum=3的这条数据就不会进行获取
可以参考:
http://msdn.microsoft.com/zh-cn/library/ms186734.aspx
http://www.cnblogs.com/85538649/archive/2011/08/13/2137277.html