2014-09-23 90 views
0

我想存储分别有两列日期和时间的txt文件。 事情是这样的: 1999-01-01 12点08分56秒在猪存储日期和时间

现在我想执行使用PIG一些日期操作,但我想存储日期和时间,这样 1999-01-01T12:08: 56(我检查这个链接): http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

我想知道的是,我可以使用什么样的格式,其中我的日期和时间均在一列,这样我可以把它喂的猪,然后如何将该日期载入猪。我知道我们将其更改为日期时间,但它显示错误。有人可以告诉我如何一起加载日期时间数据。一个例子会有很大的帮助。

+0

我对阿帕奇PIG一无所知。但是,如果您的问题仅仅是如何获取表示日期和字符串的字符串来表示日期时间,则可以将这两个字符串合并为一个字符串来解析为日期时间值(对象),可能将该值调整为另一个值时区(如UTC),然后将该值序列化为不同格式的字符串以表示组合的日期时间值......至少在StackOverflow中至少有一千个问题和答案。我只是给了你需要搜索的关键词,以及'joda'和'java.time'。 – 2014-09-23 18:38:01

+0

[解析日期字符串到某些Java对象]的可能重复(http://stackoverflow.com/questions/8854780/parse-date-string-to-some-java-object) – 2014-09-23 18:41:55

回答

2

请让我知道这是否适合你。

input.txt 
1999-01-01 12:08:56 
1999-01-02 12:08:57 
1999-01-03 12:08:58 
1999-01-04 12:08:59 

PigScript: 
A = LOAD 'input.txt' using PigStorage(' ') as(date:chararray,time:chararray); 
B = FOREACH A GENERATE CONCAT(date,'T',time) as myDateString; 
C = FOREACH B GENERATE ToDate(myDateString); 
dump C; 

Output: 
(1999-01-01T12:08:56.000+05:30) 
(1999-01-02T12:08:57.000+05:30) 
(1999-01-03T12:08:58.000+05:30) 
(1999-01-04T12:08:59.000+05:30) 

Now the myDateString is in date object, you can process this data using all the build in date functions. 

Incase if you want to store the output as in this format 
(1999-01-01T12:08:56) 
(1999-01-02T12:08:57) 
(1999-01-03T12:08:58) 
(1999-01-04T12:08:59) 

you can use REGEX_EXTRACT to parse the each data till "." something like this 

D = FOREACH C GENERATE ToString($0) as temp; 
E = FOREACH D GENERATE REGEX_EXTRACT(temp, '(.*)\\.(.*)', 1); 
dump E; 

Output: 
(1999-01-01T12:08:56) 
(1999-01-02T12:08:57) 
(1999-01-03T12:08:58) 
(1999-01-04T12:08:59) 
+0

嗨....当我使用ToDate函数我得到这个输出: (1999-01-01T12:08:56.000-08:00) (2011-03-19T19:07:43.000-07:00) (2008-09-25T21:08: (2014-11-30T11:11:21.000-08:00) (1978-12-13T20:32:31.000-08:00) (2010-11-21T17:33:34.000- 08:00) (2010-10-24T22:34:43.000-07:00) (2007-09-27T18:21:44.000-07:00) 你能告诉我为什么我没有得到+05: 30在我的输出?我怎样才能改变时区? 还有一件事,当我使用REGEX这样的数据后: (1999-01-01T12:08:56) (1999-01-02T12:08:57) 我还可以使用我所有的日期这个提取的数据的时间函数? – CodeReaper 2014-09-24 03:58:29

+1

嗨.... ToString($ 0)不起作用。它抛出这个错误: grunt> D = FOREACH C GENERATE ToString($ 0)as temp; 2014-09-23 21:09:24,305 [main] ERROR org.apache.pig.tools.grunt.Grunt - 错误1045: <第19行,第23列>无法推断org.apache.pig的匹配函数.builtin.ToString为多个或不适合。请使用明确的演员。 – CodeReaper 2014-09-24 04:30:10