我在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脚本来获取数据并对其进行转置。 在此先感谢:)
答案 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;
当然,只有当您有两个已定义的主题时,此代码段才有效..:)
罗曼。