我的猪拉丁文脚本中的错误

Posted

技术标签:

【中文标题】我的猪拉丁文脚本中的错误【英文标题】:Bug in my Pig Latin script 【发布时间】:2016-12-04 07:26:50 【问题描述】:

我正在尝试对 Pig 中的文件进行中值操作。文件如下所示。

NewYork,-1
NewYork,-5
NewYork,-2
NewYork,3
NewYork,4
NewYork,13
NewYork,11
Amsterdam,12
Amsterdam,11
Amsterdam,2
Amsterdam,1
Amsterdam,-1
Amsterdam,-4
Mumbai,1
Mumbai,4
Mumbai,5
Mumbai,-2
Mumbai,9
Mumbai,-4

文件加载完毕,里面的数据分组如下:

 wdata = load 'weatherdata' using PigStorage(',') as (city:chararray, temp:int);
 wdata_g = group wdata by city;

我试图从城市的所有温度中获取中位数如下:

wdata_tempmedian = foreach wdata_g  tu = wdata.temp as temp; ord = order tu by temp generate group, Median(ord); 

数据是有序的,因为需要按排序顺序找到中位数。 但是我收到以下错误消息,我无法弄清楚错误是什么:

[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 3, column 53> mismatched input 'as' expecting SEMI_COLON

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

你缺少一个';'订购温度后。

wdata_tempmedian = FOREACH wdata_g  
                     tu = wdata.temp as temp; 
                     ord = ORDER tu BY temp;
                     GENERATE group, Median(ord);
                      

wdata_ordered = ORDER wdata_g BY temp;
wdata_tempmedian = FOREACH wdata_ordered GENERATE group, Median(ord);

注意:我假设您使用的是 data-fu,因为 PIG 没有 Median 函数。确保 jar 已正确注册

register /path/datafu-pig-incubating-1.3.1.jar 

【讨论】:

以上是关于我的猪拉丁文脚本中的错误的主要内容,如果未能解决你的问题,请参考以下文章

两个表之间的猪拉丁计数差异

如何在我的猪脚本中设置多行字符串?

text JavaScript中的猪拉丁语翻译

hortonworks沙箱中的猪错误

PIG 加载 CSV - 地图类型错误

PIG UDF 错误 - 可以使用导入解决