我可以发送一个关系到Pig函数作为输入吗?一个关系可以包含多个元组。如何在Pig函数中逐个读取每个元组?
Ok.Below是我的示例输入文件。
Surender,HDFC,60000,CTS
Raja,AXIS,80000,TCS
Raj,HDFC,70000,TCS
Kumar,AXIS,70000,CTS
Remya,AXIS,40000,CTS
Arun,SBI,30000,TCS
Vimal,SBI,10000,TCS
Ankur,HDFC,80000,CTS
Karthic,HDFC,95000,CTS
Sandhya,AXIS,60000,CTS
Amit,SBI,70000,CTS
myinput = LOAD '/home/cloudera/surender/laurela/balance.txt' USING PigStorage(',') AS(name:chararray,bank:chararray,amt:long,company:chararray);
grouped = GROUP myinput BY company;我所需要的是每一家公司薪酬最高的员工的细节。我该如何使用UDF呢?
我需要这样的东西
CTS Karthic,HDFC,95000,CTS
TCS Raja,AXIS,80000,TCSSomeOne能帮我吗?
发布于 2014-06-04 18:41:34
此脚本将给出所需的结果:
A = LOAD '/home/cloudera/surender/laurela/balance.txt' USING PigStorage(',') AS(name:chararray,bank:chararray,amt:long,company:chararray);
B = GROUP A BY (company);
topResults = FOREACH B {result = TOP(1, 2, A); GENERATE FLATTEN(result);}
dump topResults;解释:
首先,我们A组基于company.So A是:
{(Surender,HDFC,60000,CTS),(Kumar,AXIS,70000,CTS),(Remya,AXIS,40000,CTS),(Ankur,HDFC,80000,CTS),(Karthic,HDFC,95000,CTS),(Sandhya,AXIS,60000,CTS),(Amit,SBI,70000,CTS)}
(TCS,{(Raja,AXIS,80000,TCS),(Raj,HDFC,70000,TCS),(Raj,SBI,30000,TCS),(Vimal,SBI,10000,TCS)})
然后,在B中定义元组,根据列2,即amt的值,从B中发现的关系式A中,生成另一个元组,它等于前1记录。列从0编号。
Note首先,您的数据在公司名称之后有额外的空格。请删除额外的空格或使用下列数据:
Surender,HDFC,60000,CTS
Raja,AXIS,80000,TCS
Raj,HDFC,70000,TCS
Kumar,AXIS,70000,CTS
Remya,AXIS,40000,CTS
Arun,SBI,30000,TCS
Vimal,SBI,10000,TCS
Ankur,HDFC,80000,CTS
Karthic,HDFC,95000,CTS
Sandhya,AXIS,60000,CTS
mit,SBI,70000,CTS发布于 2014-06-04 16:52:51
您不需要编写一个UDF来完成这个任务,只需使用http://pig.apache.org/docs/r0.11.0/func.html#topx中的top函数就可以了。
下面是一个应该工作的代码示例(没有测试):
grouped = GROUP myinput BY company;
result = FOREACH grouped GENERATE company, FLATTEN(TOP(1,2,grouped));https://stackoverflow.com/questions/24021676
复制相似问题