【发布时间】:2015-01-15 18:57:20
【问题描述】:
所以,我正在处理一个包含 http 流量条目的日志文件。我正在尝试确定每个状态代码一天中每个小时的记录数。 所以,我的想法输出是这样的:
0 (200, 234) (201, 100) (404, 5553)
1 (200, 2234) (201, 1100) (404, 53)
....
我进行了以下转换:
e1 = group LINES BY (hour, statusCode);
e2 = foreach e1 generate group.hour, group.statusCode, COUNT(LINES);
e3 = group e2 by hour;
e4 = foreach e3 {
statusCount = foreach e2 generate statusCode, $2;
generate e3.group, statusCount;
};
当我尝试“转储 e4”时,我收到以下错误消息:
标量在输出中有不止一行。第一个: (0,{(0,000,1),(0,200,951),(0,206,1),(0,302,4),(0,304,20),(0,403,118),(0,500,6)}), 第二 :(1,{(1,200,781),(1,301,1),(1,304,14),(1,400,1),(1,403,111),(1,502,12)})
如您所见,值在那里,我只需要保存它们...但是如何保存?我试着做一个
e5 = foreach e4 generate group, statusCount;
但我得到相同的输出。我知道我缺少一些基本的东西,但我不知道是什么..
--
【问题讨论】:
-
LINES的架构是什么?
-
LINES 是别名。您需要计算一列中的行数,而不是关系 LINES 中的行数。
-
您能提供一些示例输入数据吗?在您的最终输出“0 (200, 234) (201, 100) (404, 5553)”中,我假设 0 指的是时间,200,201,401 指的是错误代码,234,100,5553 指的是相应错误代码的总数。对吗?
-
@SivasakthiJayaraman 是的,你是对的。
标签: hadoop apache-pig