一个想法值得考虑....
参考:http://pig.apache.org/docs/r0.12.0/func.html所使用的字符串和日期函数。
输入:
1/2/12|13:3.8
04:4.1|12:1.4
15:4.3|1/3/13
猪脚本:
A = LOAD 'input.csv' USING PigStorage('|') AS (start_time:chararray,end_time:chararray);
B = FOREACH A GENERATE (INDEXOF(end_time,'/',0) > 0 AND LAST_INDEX_OF(end_time,'/') > 0 AND (INDEXOF(end_time,'/',0) != LAST_INDEX_OF(end_time,'/'))
? (ToUnixTime(ToDate(end_time,'MM/dd/yy'))) : (ToUnixTime(ToDate(end_time,'mm:ss.S')))) -
(INDEXOF(start_time,'/',0) >0 AND LAST_INDEX_OF(start_time,'/') > 0 AND (INDEXOF(start_time,'/',0) != LAST_INDEX_OF(start_time,'/'))
? (ToUnixTime(ToDate(start_time,'MM/dd/yy'))) : (ToUnixTime(ToDate(start_time,'mm:ss.S')))) AS diff_time;
C = FOREACH (GROUP B ALL) GENERATE AVG(B.diff_time);
DUMP C;
注:代替ToUnixTime,我们可以使用ToMilliSeconds()方法。
输出:
(1.0569718666666666E7)
为什么不写一些UDF这样做呢?这很容易在JAVA – Mzf
中做到这一点我只是想知道如果我可以使用标准的Pig库或方法来做到这一点,而不是现在编写我自己的实现。 – madbitloman
@madbitloman:通过使用Pig的字符串和日期函数添加了一个答案,尝试并为此处理您的用例。 –