ToDate功能提供意外输出

时间:2015-05-29 19:28:45

标签: apache-pig to-date

我使用ToDate(userinput, format)函数来隐藏我的chararray字段。我使用ToDate(userinput, 'MM/dd/yyyy')将字段从chararray转换为date,但看起来我没有像我预期的那样看到输出。

以下是代码:

l_dat = load 'textfile' using PigStorage('|') as  (first:chararray,last:chararray,dob:chararray);

c_dat = foreach l_dat generate ToDate(dob,'MM/dd/yyyy') as mydate;
describe c_dat;
dump c_dat;

数据如下所示:

(firstname1,lastname1,02/02/1967)
(John,deloy,05/26/1967)
(frank,fun,05/18/1967)

输出如下:

c_dat: {mydate: datetime}
(1967-05-26T00:00:00.000-04:00)
(1967-05-18T00:00:00.000-04:00)
(1967-02-02T00:00:00.000-05:00)

我期望的输出是dateObjects,数据如下所示:

(05/26/1967)
(05/18/1967)
(02/02/1967)

请告知我是否做错了什么?

1 个答案:

答案 0 :(得分:0)

Ref:http://pig.apache.org/docs/r0.12.0/func.html#to-date,ToDate函数的返回类型是DateTime对象。您可以在输出

中共享的架构描述中观察到它
c_dat: {mydate: datetime}

如果您使用所需格式的日期,则无需进行任何转换。

c_dat = foreach l_dat generate dob as mydate;

如果您有兴趣将chararray日期转换为任何其他格式,则必须在获取DateTime对象后使用ToString()函数。

  Step 1: Convert date chararray to Date Time Ojbect using ToDate(datesstring, inutformat)
  Step 2 : Use ToString(DateTime object, required format) to get the string date in the required format.

这可以通过以下单步实现。

ToString(ToDate(date,inputformat),requiredformat);

参考:http://pig.apache.org/docs/r0.12.0/func.html#to-string了解详情。