使用pig转换以毫秒表示的日期

u3r8eeie  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(405)

真的被困在这里了!假设我有以下数据集:

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

观察结果a和b一般采用以下格式minutes:seconds.milliseconds like a是单击,b是响应。有时,如果任何事件恰好发生在新的一天的开始,时间格式的形式为月/日/年。
我想要什么?就是计算b和a之间的平均差。我可以很容易地处理m:s.ms,将它们分为a和b的两部分,然后转换为double并执行所有需要的操作,但当引入m/d/yy时,所有操作都失败了。省略它们是最简单的方法,但这不是一个真正的好做法。是否有一个明确的方法来处理使用pig的异常?

tzdcorbm

tzdcorbm1#

一个值得深思的想法。。。。
裁判: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

Pig脚本:

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、 我们可以使用tomilliseconds()方法来代替tounixtime。
输出:

(1.0569718666666666E7)

相关问题