2017-09-15 224 views
0

我正在下面执行错误:错误1200:猪脚本无法解析

data1 = load '/user/pig/join2_genchanA.txt' using PigStorage(',')as (showname:chararray, channelname:chararray); 

data2 = load '/user/pig/join2_gennumA.txt' using PigStorage(',')as (showname:chararray, showviewer:long); 

joindata = join data1 by showname, data2 by showname; 

bat = filter joindata by channelname=='BAT'; 

foreachviewer = FOREACH bat GENERATE channelname, showviewer; 

foreachgroupall = GROUP foreachviewer all; batsum = FOREACH foreachgroupall GENERATE SUM(bat.showviewers); 

现在我得到以下错误:

"2017-09-15 04:01:03,517 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: **Pig script failed to parse**: <line 28, column 46> Invalid scalar projection: bat Details at logfile: /home/cloudera/pig_1504878875671.log" 

请帮助我。

+0

错误提及第28行第46列。脚本中的28行是什么?脚本看起来比错误指示的小很多。 –

+0

嗨inquisitive_mind,这是唯一的代码。行值28表示在错误行代码之前执行了27行。 – AMJO

回答

0

这是说野外蝙蝠在别名foreachgroupall中不可用。

在foreachgroupall上做一个DESCRIBE,它会显示字段名。

替换最后一行在您的代码段与下面的一个 -

batsum = FOREACH foreachgroupall GENERATE SUM(foreachviewer.data2::showviewer); 

我建议你阅读的数据集,而不是后加入过滤通道名称BAT稍早进行过滤。请参阅下面的代码片段以获取详细信息 -

data1 = load '/user/pig/join2_genchanA.txt' using PigStorage(',') as (showname:chararray, channelname:chararray); 

data2 = load '/user/pig/join2_gennumA.txt' using PigStorage(',') as (showname:chararray, showviewer:long); 

bat = FILTER data1 BY channelname=='BAT'; 

joindata = join bat by showname, data2 by showname; 

foreachviewer = FOREACH joindata GENERATE bat::channelname AS channelname, data2::showviewer AS showviewer; 

req_stats = FOREACH(GROUP foreachviewer ALL) GENERATE SUM(foreachviewer.showviewer); 

DUMP req_stats;