Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache pig 在清管器中存储日期和时间_Apache Pig - Fatal编程技术网

Apache pig 在清管器中存储日期和时间

Apache pig 在清管器中存储日期和时间,apache-pig,Apache Pig,我试图存储一个txt文件,该文件分别有两列date和time。 大概是这样的: 1999-01-01 12:08:56 现在我想用PIG执行一些日期操作,但我想像这样存储日期和时间 1999-01-01T12:08:56(我检查了这个链接): 我想知道的是,我可以使用什么样的格式,其中我的日期和时间在一列中,这样我就可以将其输入到PIG,然后如何将该日期加载到PIG中。我知道我们把它改成了datetime,但它显示错误。有人能告诉我如何一起加载日期和时间数据吗。举个例子会很有帮助。请让我知道这

我试图存储一个txt文件,该文件分别有两列date和time。 大概是这样的: 1999-01-01 12:08:56

现在我想用PIG执行一些日期操作,但我想像这样存储日期和时间 1999-01-01T12:08:56(我检查了这个链接):


我想知道的是,我可以使用什么样的格式,其中我的日期和时间在一列中,这样我就可以将其输入到PIG,然后如何将该日期加载到PIG中。我知道我们把它改成了datetime,但它显示错误。有人能告诉我如何一起加载日期和时间数据吗。举个例子会很有帮助。

请让我知道这是否适合您

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)  

我对阿帕奇猪一无所知。但是,如果您的问题只是如何获取表示日期的字符串和表示一天中某个时间的字符串,请将这两个字符串组合成一个字符串,解析为日期时间值(对象),并可能将该值调整为另一个时区,如UTC,然后以不同的格式将该值序列化为字符串,以表示组合的日期时间值……好吧,这已经在StackOverflow上的至少一千个问答中讨论过了。我刚才给了你需要搜索的关键词,还有“joda”和“java.time”。Hi可能是重复的。当我使用ToDate函数时,我得到的结果如下:(1999-01-01T12:08:56.000-08:00)(2011-03-19T19:07:43.000-07:00)(2008-09-25T21:08:31.000-07:00)(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吗?我如何更改时区?还有一件事,当我使用这样的正则表达式得到数据时:(1999-01-01T12:08:56)(1999-01-02T12:08:57)我还可以在提取的数据上使用我的所有日期时间函数吗?嗨…ToString($0)不起作用。它抛出了以下错误:grunt>D=FOREACH C GENERATE ToString($0)as temp;2014-09-23 21:09:24305[main]错误org.apache.pig.tools.grunt.grunt-错误1045:无法推断org.apache.pig.builtin.ToString的匹配函数是多个匹配函数,或者没有匹配函数。请使用显式强制转换。