我对pig和hadoop世界还很陌生。我遇到的问题可能很简单,但我无法继续。
所以我有下面的数据,基本上是一天的刷卡数据。我需要用pig计算员工一天中花费的总小时数,即第一次上班时间(他到达办公室的时间)和最后一次外出时间(一天中最后一次刷卡)之间的差值。
EmpID In_Time Out_Time
1 9:00 10:00
2 8:00 11:00
3 10:00 12:00
1 11:00 13:00
1 14:00 18:00
2 12:00 18:00
3 13:00 18:00
所以我写了下面的脚本,但它似乎没有给出正确的结果。
grunt> emprec = load '/emptime/emptime' using PigStorage() as (empid:int,in:chararray,out:chararray);
grunt> aggdata = group emprec by empid;
grunt> emptime = foreach aggdata generate (emprec.empid,MIN(emprec.in),MAX(emprec.out));
我似乎没有得到正确的结果与脚本编写。
我需要的结果是
中间结果(据我所知)
EmpID In_Time Out_Time
1 9:00 18:00
2 8:00 18:00
3 10:00 18:00
所需的最终输出是输出时间与输入时间之差
EmpID Total_Time
1 9:00
2 10:00
3 8:00
我已经写了最后一行来得到最短和最长的时间,这样我就可以减去2,得到在办公室的总时间
请注意,如果您想假设时间为int或任何其他格式,请这样做,因为这只是一个例子。
提前谢谢
你好,契丹
2条答案
按热度按时间j91ykkif1#
使用
MAX
,MIN
在chararray
数据类型未提供预期结果。如果你想避免写作UDF
您可以遵循以下解决方案:我从数据开始:
输出:
holgip5t2#
如果您有兴趣创建pig udf,那么下面是代码: