我可以发送一个与pig udf函数的关系作为输入吗?关系中可以有多个元组。如何在pig udf函数中逐个读取每个元组?
下面是我的示例输入文件。
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;
我所需要的只是关于每家公司薪水最高的雇员的详细资料。我该如何使用自定义项呢?
我需要这样的东西
CTS Karthic,HDFC,95000,CTS
TCS Raja,AXIS,80000,TCS
有人能帮我吗。
2条答案
按热度按时间s5a0g9ez1#
此脚本将为您提供所需的结果:
说明:
首先,我们以公司为基础将a分组,所以a是:
(cts,{(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),(arun,sbi,30000,tcs),(vimal,sbi,10000,tcs)})
然后我们说,对于b中的每个元组,根据第2列的值,即amt,从b中找到的关系a生成另一个元组结果,该结果等于前1个记录。列从0开始编号。
注意:首先,您的数据在公司名称后有额外的空格。请删除多余的空格或使用以下数据:
qc6wkl3g2#
您不需要编写自定义项就可以做到这一点,只需使用pig的top函数即可:http://pig.apache.org/docs/r0.11.0/func.html#topx
下面是一个应该工作(未测试)的代码示例: