gpt4 book ai didi

hadoop - 使用 PIG 将日期转换为毫秒

转载 作者:可可西里 更新时间:2023-11-01 15:31:08 25 4
gpt4 key购买 nike

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

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

观察 A 和 B 的格式通常为分钟:秒.毫秒,例如 A 是点击,B 是响应。如果任何事件恰好在新一天的开始,有时时间格式有月/日/年的形式。

我想要什么? 是计算 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

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;

注意我们可以使用 ToMilliSeconds() 方法代替 ToUnixTime。

输出:

(1.0569718666666666E7)

关于hadoop - 使用 PIG 将日期转换为毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32690026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com