使用 PIG 将日期转换为毫秒

Convert date with milliseconds using PIG

真的卡在这上面了!假设我有以下数据集:

A      |   B
------------------
1/2/12 | 13:3.8 
04:4.1 | 12:1.4
15:4.3 | 1/3/13

Observations A 和 B 通常采用 minutes:seconds.milliseconds 格式,例如 A 是点击,B 是响应。如果任何事件恰好在新一天的开始,有时时间格式的形式为 month/day/year。

我想要什么? 是计算 B 和 A 之间的平均差异。我可以轻松处理 m:s.ms 将它们分成两部分,每个 A 和B 然后转换为 DOUBLE 并执行所有需要的操作但是当 m/d/yy 被引入时它都失败了。省略它们的最简单方法,但这不是一个很好的做法。使用 PIG 是否有明确的方法来处理此类异常?

一个值得思考的想法....

参考: 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;

N.B. 我们可以使用 ToMilliSeconds() 方法代替 ToUnixTime。

输出:

(1.0569718666666666E7)