有人可以帮我理解pig中的top()函数。实际上我对top()的参数感到困惑。 请用一个例子来解释。
答案 0 :(得分:2)
Top()函数用于获取您提到的Top特定数量的元组。
假设你有一些架构让我们说 (ID,年龄,姓名)
Dataset:
(1,22,k)
(2,23,j)
(3,22,l)
(4,24,m)
(5,23,n)
(6,24,o)
(7,22,p)
(8,23,q)
(9,24,r)
现在只需加载此文件:
A =Load ..
B= Group A by age;
C = Foreach B {
top = TOP(2,0,A)
Generate top;
}
输出:
({(7,22,p),(3,22,l)})
({(8,23,q),(5,23,n)})
({(9,24,r),(6,24,o)})
每个年龄段的前2名记录。
和
TOP(2,0,A) implies TOP(topN,column,relation)
所以在这里我们说根据0列是id的前两条记录。所以两个记录从每个年龄开始具有更高(顶部)id。
请回复我以获取更多查询。 :-) 快乐学习。
答案 1 :(得分:1)
如果你只想获取一个包的前N个元组。然后使用TOP()
。
A = LOAD 'file.txt' USING PigStorage(',') AS (col1:int,col2:int);
file.txt
(1001,800)
(1001,800)
(1001,800)
(1002,900)
(1003,900)
(1003,900)
(1004,1800)
(1005,1800)
B = GROUP A BY (col1);
(1001,{(1001,800),(1001,800),(1001,800)})
(1002,{(1002,900)})
(1003,{(1003,900),(1003,900)})
(1004,{(1004,1800)})
(1005,{(1005,1800)})
top_data = FOREACH B { top = TOP(1, 1, A); GENERATE FLATTEN(top);};
在TOP()
之后的输出,第一个arg是前N,即 1 ,第二个arg是列号。即 1 ,第三个是关系名称,即 A 。
(1001,800)
(1002,900)
(1003,900)
(1004,1800)
(1005,1800)