如何将UTC时间转换为使用猪的IST

问题描述:

我有一台机器数据进入hdfs如下,第8个字段是UTC时间(060037),我需要将它转换为IST并使时间格式为hh:mm:使用SS猪如何将UTC时间转换为使用猪的IST

VTS,01,0097,9739965515,NM,GP,20,060037,V,0000.0000,N,00000.0000,E,0.0,0.0,061114,0068,00,4000,00,999,149,9594 
VTS,01,0097,9739965515,SP,GP,33,060113,V,0000.0000,N,00000.0000,E,0.0,0.0,061114,0068,00,4000,00,999,152,B927 

使用字符串函数我试图将其转换为Unix日期格式,现在我得到的时间像2014-11-06 06:01:13它在UTC格式如何将其转化为IST有什么inbuild功能可做到这一点?

A = LOAD '/user/hue/Anas' AS (line:chararray); 
B = FOREACH A { 
      splitRow = TOKENIZE(line,'+++'); 
      GENERATE FLATTEN(splitRow) AS newList; 
      } 
C = FOREACH B GENERATE FLATTEN(STRSPLIT(newList,',',23)); 
D = FILTER C BY $1==01; 
E = foreach D generate $7 as time,$15 as date; 
F = foreach E generate SUBSTRING(time,0,2) as hh,SUBSTRING(time,2,4) as mm,SUBSTRING(time,4,6) as ss,SUBSTRING(date,0,2) as date,SUBSTRING(date,2,4) as month,SUBSTRING(date,4,6) as year; 
G = foreach F generate CONCAT('20',CONCAT(year,CONCAT('-',CONCAT(month,CONCAT('-',date))))) as date,CONCAT(hh,CONCAT(':',CONCAT(mm,CONCAT(':',ss)))) as time; 
H = FOREACH G GENERATE CONCAT(date,CONCAT(' ',time)) AS UTC; 
DUMP H; 
+0

1)使用CONCAT作为CONCAT - 全部大写,2)检查是否可以使用内置的ToDate UDF来实现您的结果,3)您还可以检查其他第三方库的类似UDF – mbaxi 2014-11-06 12:11:44

+0

这个讨论可能对您有所帮助http :// *.com/questions/19140126/pig-3rd-party-udf-clarification – mbaxi 2014-11-06 12:13:56

+0

@AnasA和另一个选项是编写自己的UDF,它会做你的转换 – 2014-11-06 12:24:42

请下面的3行添加到现有的代码,它会工作

I = FOREACH H GENERATE ToDate(UTC,'yyyy-MM-dd HH:mm:ss','UTC') AS UTCTime; 
J = FOREACH I GENERATE ToDate(ToString(UTCTime,'yyyy-MM-dd HH:mm:ss.SSSZ'),'yyyy-MM-dd HH:mm:ss.SSSZ','Asia/Kolkata') AS ISTTime; 
DUMP J 

输出的UTC时间:

(2014-11-06 06:00:37) 
(2014-11-06 06:01:13) 

的IST时间输出:

(2014-11-06T11:30:37.000+05:30) 
(2014-11-06T11:31:13.000+05:30) 

ISTTime是DateTime对象,现在你可以使用所有内置的功能(GetDay(),GETTIME()等)。

您是否尝试过使用piggybank?

我认为格式函数会做很多你想要的。

https://gist.github.com/griggheo/1780912

你可能会写自己的UDF为IST转换,但可以内嵌Python或Ruby或做....