Hadoop 如何执行分组,然后在pig中的其他列上使用DISTINCT

Hadoop 如何执行分组,然后在pig中的其他列上使用DISTINCT,hadoop,apache-pig,Hadoop,Apache Pig,我刚刚开始学习PIG,下面的问题需要一些帮助。提前谢谢 例如:我有如下输入: 职业类别名称 Actress Acting Marion Cotillard Actor Acting Liam Nelson Tennis Plyr Athletics Roger Federer Football Plyr Athletics Neymar Actor Acting Tom Hanks Actress Actin

我刚刚开始学习PIG,下面的问题需要一些帮助。提前谢谢
例如:我有如下输入:

职业类别名称

Actress       Acting     Marion Cotillard
Actor         Acting     Liam Nelson
Tennis Plyr   Athletics  Roger Federer
Football Plyr Athletics  Neymar
Actor         Acting     Tom Hanks
Actress       Acting     Elizabeth Banks
US Senator    Politics   Elizabeth Warren
Football Plyr Athletics  Mesut Ozil
我想知道一个类别有多少种。 表演有两种类型,一种是演员,另一种是演员。因此,结果将为2。
面临的问题:无法使用“职业”列将输出与“按类别分组”区分开来:(

先区分,然后按类别分组。假设您已将数据加载到关系A中

选择加载后的两列

理清关系

按类别分组

计算每个类别的职业

B = FOREACH A GENERATE Occupation as Occupation,Category as Category;
C = DISTINCT B;
D = GROUP C BY $1; 
E = FOREACH D GENERATE group,COUNT(C.Occupation); 
DUMP E;

先区分,然后按类别分组。假设您已将数据加载到关系A中

选择加载后的两列

理清关系

按类别分组

计算每个类别的职业

B = FOREACH A GENERATE Occupation as Occupation,Category as Category;
C = DISTINCT B;
D = GROUP C BY $1; 
E = FOREACH D GENERATE group,COUNT(C.Occupation); 
DUMP E;
试试这个:

x= load '<data>' using PigStorage('\t') as (occupation:chararray,category:chararray,name:chararray);

 x_grouped= group x by category;

x_grouped_distinct= foreach x_grouped { cat= distinct $1.occupation; generate $0, cat, COUNT(cat);}; 

dump x_grouped_distinct;
x=使用PigStorage('\t')加载“”(职业:chararray,类别:chararray,名称:chararray);
x_分组=按类别划分的x组;
x_grouped_distinct=foreach x_grouped{cat=distinct$1.occulation;生成$0,cat,COUNT(cat);};
转储x_分组_不同;
试试这个:

x= load '<data>' using PigStorage('\t') as (occupation:chararray,category:chararray,name:chararray);

 x_grouped= group x by category;

x_grouped_distinct= foreach x_grouped { cat= distinct $1.occupation; generate $0, cat, COUNT(cat);}; 

dump x_grouped_distinct;
x=使用PigStorage('\t')加载“”(职业:chararray,类别:chararray,名称:chararray);
x_分组=按类别划分的x组;
x_grouped_distinct=foreach x_grouped{cat=distinct$1.occulation;生成$0,cat,COUNT(cat);};
转储x_分组_不同;

面对下面的错误,实际数据有更多字段,如年份、日期等,原因是:org.apache.pig.backend.executionengine.execute:错误0:Scalar在输出中有多行。第一:(1999年,演员,1999年1月11日,表演,迈克尔·J·福克斯),第二:(1999年,喜剧演员,1999年1月12日,喜剧演员,桑德拉·伯恩哈德)(常见原因:“加入”然后“FOREACH…GENERATE foo.bar”应该是“foo::bar”)。在最后一段中,它说:ERROR org.apache.pig.tools.grunt.grunt-ERROR 1066:无法打开别名fin的迭代器fin是我的最后一个包,因此简称为“fin”。如果您有时间,请提供帮助。@PriyanshuSharma我已编辑了脚本并添加了输出。即使我在发布上述错误之前也做了此更正……什么都没有您的脚本有问题…检查后发现版本兼容性问题。感谢您的帮助,主要问题最终由您的脚本解决。我现在可以处理其他问题:)面对下面的错误,实际数据中有更多字段,如年份、日期等,原因是:org.apache.pig.backend.executionengine.ExecutionException:错误0:Scalar在输出中有多行。第一:(1999年,演员,1999年1月11日,演员,迈克尔·福克斯),第二:(1999年,喜剧演员,1999年1月12日,喜剧演员,桑德拉·伯恩哈德)(常见原因:“加入”然后“FOREACH…生成foo.bar应该是“foo::bar”)。在最后一段中,它说:ERROR org.apache.pig.tools.grunt.grunt-ERROR 1066:无法打开别名fin的迭代器fin是我的最后一个包,因此简称为“fin”。如果您有时间,请提供帮助。@PriyanshuSharma我已经编辑了脚本并添加了输出。即使在发布上述错误之前,我也对您进行了此更正。。。你的脚本没有问题。。。检查后,我发现版本兼容性问题。谢谢你的帮助,主要问题最终通过你的脚本解决了。我现在可以处理其他问题:)