2015-11-04 43 views
0

我表示这样的日期源记录得到一个字符串的有效日期格式:如何使用猪

20151104 

当我用猪来加载源文件,我定义的记录像这样的:

data_raw = LOAD '/user/hue/myfile.csv' USING PigStorage(',') AS 
(date:datetime) 

然后使用下面的代码把它推到一个新的格式:

data_values = FOREACH data_raw GENERATE ToString(date, 'yyyyMMdd') AS 
date 

当我甩了var我得到:

(201511040101) 

0101从哪里来?

回答

0

输入不是ISO日期和时间格式。

将输入日期更改为20151104至2015-11-04,您将能够看到预期结果。

编号:

  1. http://www.w3.org/TR/NOTE-datetime
  2. https://pig.apache.org/docs/r0.11.1/func.html#datetime-functions

如果你能读取输入的字符串,如果它在预期的格式,那么你不需要做任何转换如果不能使用DateTime函数来实现相同的话。

更新:如果您将Date设置为一种格式的字符串并且希望将其转换为任何其他格式,那么如果您必须使用ToDate()和ToString()方法。

N.B:TODATE的返回类型是日期时间对象和的ToString是字符串

http://pig.apache.org/docs/r0.12.0/func.html#to-date http://pig.apache.org/docs/r0.12.0/func.html#to-string

输入:

20151104 

PigScript:

A = LOAD 'date_input' USING PigStorage(',') AS (my_date:chararray); 
B = FOREACH A GENERATE ToDate(my_date, 'yyyyMMdd') AS my_date; 
C = FOREACH B GENERATE ToString(my_date,'yyyy-MM-dd') AS my_date; 

输出:

DUMP B : 

(2015-11-04T00:00:00.000-08:00) 

DUMP C : 

(2015-11-04) 
+0

不是改变格式在源文件中,可以[TODATE]其他(https://pig.apache.org/docs/r0。 11.1/func.html#subtract-duratioin)用于转换它? – andy

+0

@andy:1.输入日期是否可以读为chararray? 2.您是否尝试将输入日期从yyyyMMdd更新为任何其他格式?根据上述两个问题更新你的用例。 –

+0

是的,它可以作为chararray读取,当使用Todate(日期,yyyyMMdd)进行转换时,将生成20151104的原始字符串。不应该将其作为2015-11-04出来吗?最终,我希望将非ISO格式转换为不错的ISO日期值。 – andy