使用pig将可读字符串日期转换为日期?

eqfvzcg8  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(341)

我在文本文件中存储了以下人类可读的日期格式:

Wed Oct 15 09:26:09 BST 2014
Wed Oct 15 19:26:09 BST 2014
Wed Oct 18 08:26:09 BST 2014
Wed Oct 23 10:26:09 BST 2014
Sun Oct 05 09:26:09 BST 2014
Wed Nov 20 19:26:09 BST 2014

如何使用转换日期,使其与pig的todate()函数兼容,然后使用gethour()、getyear()、getday()和getmonth()将日期范围约束和逻辑应用于查询?

lh80um4z

lh80um4z1#

1.pig只支持几种格式的日期,因此您需要根据以下格式之一转换日期和时间。
http://docs.oracle.com/javase/6/docs/api/java/text/simpledateformat.html

2.您的输入有bst作为时区,但在pig中不支持bst,因此您需要选择一个与bst等效的不同时区。
这里有时区http://joda-time.sourceforge.net/timezones.html
示例:
我选择的时间格式为“eee,d mmm yyy hh:mm:ss z”wed,4 jul 2001 12:08:56”,bcoz这与您的输入数据有些匹配。
英国夏令时时区不可用,所以我选择“gmt”作为时区,您可以根据需要更改。
输入文件

Wed Oct 15 09:26:09 BST 2014
Wed Oct 15 19:26:09 BST 2014
Wed Oct 18 08:26:09 BST 2014
Wed Oct 23 10:26:09 BST 2014
Sun Oct 05 09:26:09 BST 2014
Wed Nov 20 19:26:09 BST 2014

Pig手稿:

A = LOAD 'input.txt' USING PigStorage(' ') AS(day:chararray,month:chararray,date:chararray,time:chararray,tzone:chararray,year:chararray);
B = FOREACH A GENERATE CONCAT(CONCAT(CONCAT(CONCAT(day,', ',date),' ',month),' ',year),' ',time) AS mytime;
C = FOREACH B GENERATE ToDate(mytime,'EEE, d MMM yyyy HH:mm:ss','GMT') AS newTime;
D = FOREACH C GENERATE GetMonth(newTime),GetDay(newTime),GetYear(newTime),GetHour(newTime),GetMinute(newTime);
DUMP D;

输出:

(10,15,2014,9,26)
(10,15,2014,19,26)
(10,15,2014,8,26)
(10,22,2014,10,26)
(10,5,2014,9,26)
(11,19,2014,19,26)

相关问题