在猪中移调

时间:2013-12-04 13:10:53

标签: python apache-pig

我在Pig中有一个数据集,如下所示:

Name Class Subject Marks  
Andy 1     Maths    10  
John 1     Maths    20  
Mark 2     Maths    20  
Tony 2     Geo      30  

但我需要将其更改为:

Name Class Maths Geo  
Andy 1      10    0   
John 1      20    0   
Mark 2      20    0  
Tony 2      0    30   

任何人都可以建议我如何在Pig中执行此操作?另外,我正在尝试编写一个Python脚本来获取数据并对其进行转置。 在此先感谢:)

2 个答案:

答案 0 :(得分:0)

分组(姓名,班级)应该给你一个包含学生所有分数的BAG。然后,您可以编写一个简单的UDF来将此BAG作为输入并生成所需的输出。

答案 1 :(得分:0)

如果您的两个科目已经定义(我的意思是如果您的科目是静态的),您可以编写这个简单的代码以避免编写UDF:

A = LOAD .... AS Name, Class, Subject, Marks ...; 

B = FOREACH A GENERATE (Subject == 'Maths' ? Marks : 0) AS Maths, (Subject == 'Geo' ? Marks : 0) AS Geo, class, Name;

如果您想按名称和类聚合数据:

C = GROUP B BY (Name,class);

D = FOREACH C GENERATE group, sum(Maths) AS Maths, SUM(Geo) AS Geo;

E = FOREACH D GENERATE flatten(group), Maths, Geo;

当然,只有当您有两个已定义的主题时,此代码段才有效..:)

罗曼。