如何使用Pig从字符串中获取有效的日期格式

时间:2015-11-04 22:06:40

标签: hadoop apache-pig

我有一个代表这样日期的源记录:

20151104

当我使用Pig加载源文件时,我定义了这样的记录:

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

然后使用以下代码将其推送到新格式:

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

当我将变量转出时,我得到:

(201511040101)

0101来自哪里?

1 个答案:

答案 0 :(得分:0)

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

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

参考:

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

如果您可以将输入读作String并且如果它是预期的格式,那么您不需要进行任何转换,如果没有使用DateTime函数来实现相同的。

更新:如果你有一种格式的Date as String,并且你想将它转换为任何其他格式,那么你必须使用ToDate()和ToString()方法。

N.B :ToDate的返回类型是DateTime对象,ToString的返回类型是String

  

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)