首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送与UDF函数的关系

发送与UDF函数的关系
EN

Stack Overflow用户
提问于 2014-06-03 17:43:05
回答 2查看 96关注 0票数 0

我可以发送一个关系到Pig函数作为输入吗?一个关系可以包含多个元组。如何在Pig函数中逐个读取每个元组?

Ok.Below是我的示例输入文件。

代码语言:javascript
复制
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呢?

我需要这样的东西

代码语言:javascript
复制
CTS     Karthic,HDFC,95000,CTS
TCS     Raja,AXIS,80000,TCS

SomeOne能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-04 18:41:34

此脚本将给出所需的结果:

代码语言:javascript
复制
    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首先,您的数据在公司名称之后有额外的空格。请删除额外的空格或使用下列数据:

代码语言:javascript
复制
  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
票数 0
EN

Stack Overflow用户

发布于 2014-06-04 16:52:51

您不需要编写一个UDF来完成这个任务,只需使用http://pig.apache.org/docs/r0.11.0/func.html#topx中的top函数就可以了。

下面是一个应该工作的代码示例(没有测试):

代码语言:javascript
复制
grouped = GROUP myinput BY company;
result = FOREACH grouped GENERATE company, FLATTEN(TOP(1,2,grouped));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24021676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档